首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在libreoffice中定期更改单元格值?

如何在libreoffice中定期更改单元格值?
EN

Stack Overflow用户
提问于 2017-07-07 22:47:02
回答 1查看 3.6K关注 0票数 0

标题说明了一切..。

例如,如果我想要一个显示当前时间和每分钟自动更新的单元格(嗯,我想我们称之为时钟),我该如何做呢?

是否已经实现了一个简单的函数,还是应该创建一个宏并将其分配给特定的事件?

编辑:在@Jim提供的答案之后,我想更清楚地知道我想要什么。上面的“时钟”示例是为了让它简单易懂,但我真正想要的是标题:是一个周期性变化的单元格值,无论是字符串、数字、日期.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-08 16:13:35

首先在单元格中输入=NOW(),然后通过格式化->单元来格式化数字。

接下来,这个基本宏(来自这里)每分钟重新计算一次。转到Tools ->定制,并将其分配给Open Document事件。

代码语言:javascript
复制
Sub RecalculatePeriodically
   Const secs = 60
   On Error Goto ErrorHandler
   Do While True
      Wait(1000 * secs)
      ThisComponent.calculateAll()
   Loop
   ErrorHandler:
       'Document was probably closed
End Sub

但是,当退出LibreOffice时,这会崩溃。因此,可以使用以下线程化的Python宏(如这里)。将keep_recalculating_thread分配给Open Document事件。

代码语言:javascript
复制
import time
from threading import Thread
import uno

def keep_recalculating_thread(action_event=None):
    t = Thread(target = keep_recalculating)
    t.start()

def keep_recalculating():
    oDoc = XSCRIPTCONTEXT.getDocument()
    while hasattr(oDoc, 'calculateAll'):
        oDoc.calculateAll()
        time.sleep(60)

g_exportedScripts = keep_recalculating_thread,

另一个想法是在https://ask.libreoffice.org/en/question/5327/how-can-i-run-a-macro-at-regular-time-interval/,虽然它需要链接到另一个文件,这似乎很麻烦。

编辑

也许你在找这样的东西?通过从空白电子表格开始并在单元格1中输入A1来测试它。

代码语言:javascript
复制
def keep_changing_cell(action_event=None):
    t = Thread(target = keep_changing_thread)
    t.start()

def keep_changing_thread():
    oDoc = XSCRIPTCONTEXT.getDocument()
    oSheet = oDoc.CurrentController.ActiveSheet
    COLUMN_A = 0
    FIRST_ROW = 0
    oCell = oSheet.getCellByPosition(COLUMN_A, FIRST_ROW)
    while hasattr(oDoc, 'calculateAll'):
        oCell.setValue(oCell.getValue() + 1)
        time.sleep(2)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44980696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档