标题说明了一切..。
例如,如果我想要一个显示当前时间和每分钟自动更新的单元格(嗯,我想我们称之为时钟),我该如何做呢?
是否已经实现了一个简单的函数,还是应该创建一个宏并将其分配给特定的事件?
编辑:在@Jim提供的答案之后,我想更清楚地知道我想要什么。上面的“时钟”示例是为了让它简单易懂,但我真正想要的是标题:是一个周期性变化的单元格值,无论是字符串、数字、日期.
发布于 2017-07-08 16:13:35
首先在单元格中输入=NOW(),然后通过格式化->单元来格式化数字。
接下来,这个基本宏(来自这里)每分钟重新计算一次。转到Tools ->定制,并将其分配给Open Document事件。
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事件。
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来测试它。
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)https://stackoverflow.com/questions/44980696
复制相似问题