标题说明了一切......
例如,如果我想要一个显示当前时间的单元格并逐分钟自动更新(好吧,我想我们称之为时钟),我该怎么做?
是否已经实现了一个简单的功能,或者我应该创建一个宏并将其分配给特定事件?
编辑:按照@Jim K提供的答案,我想更清楚自己想要什么。上面的“时钟”示例是为了使其易于理解,但我真正想要的是标题:一个周期性变化的单元格值,无论是字符串,数字,日期......
答案 0 :(得分:1)
首先在单元格中输入=NOW()
,然后转到格式 - >格式化数字。细胞
接下来,此基本宏(来自here)每分钟重新计算一次。转到工具 - >自定义并将其分配给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宏(如here)。将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/,虽然它需要链接到另一个看起来很麻烦的文件。
修改强>:
也许你正在寻找这样的东西?通过从空白电子表格开始并在单元格A1中输入1
来测试它。
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)
答案 1 :(得分:0)
TL;博士
是否已实施简单功能
没有
来自LibreOffice并且最近:
(我不知道应用于细胞的时钟属性。)
有一些简单的方法可以获得时间,例如给定合适的格式,日期:
=NOW()
或 Ctrl + ;
或者,例如,没有日期:
=MOD(NOW(),1)
第一个和最后一个将更新,但仅在重新计算工作表时才会更新。
对于一个剔除的单元格(例如秒钟)我相信你需要一个脚本。