javascript Excel Office脚本setInterval不工作

mftmpeh8  于 2023-10-14  发布在  Java
关注(0)|答案(3)|浏览(118)

我想使用Office Script每1秒重新计算一次Excel工作表。这是我失败的尝试。

function sendMessage(sheet: ExcelScript.Worksheet) {
  console.log('hi');
  sheet.calculate(true);
}

function main(workbook: ExcelScript.Workbook) {
    let sheet = workbook.getActiveWorksheet();
    setInterval(sendMessage, 1000, sheet);
}

控制台上没有打印任何内容,也没有重新计算。

hgncfbus

hgncfbus1#

我帮助开发了Office脚本运行时。
通常,Office Excel旨在执行一系列步骤并完成。例如,Office Server不是为在后台持续运行而设计的。
目前setInterval将无法工作,由于如何执行Office脚本,此外,只有一个Office脚本可以执行的时间。
通常,我不建议持续运行Office脚本(运行时不支持它)。
也就是说
我曾经使用过忙碌waiting来创建一个延迟,你可以用它来暂停通话。参见下面的sleep函数:
https://github.com/wandyezj/office-script/blob/main/functions/sleep.ts

function sleep(seconds: number) {

  const millisecondDelay = seconds * 1000
  const start = Date.now()
  let now = Date.now();

  while((now - start) < millisecondDelay) {
    now = Date.now();
    // busy wait
    for (let i = 0; i < 1000; i++){}
  }

}
kupeojn6

kupeojn62#

我不熟悉offise-js,但根据一般原则,我可以猜出sheet变量在计时器事件上没有正确的值。您需要全局定义它(如果可能的话)或在sendMessage内部获取工作表。

csbfibhn

csbfibhn3#

我使用的是@wandyezj提供的sleep。这里是代码。

function sleep(seconds: number) {
    const millisecondDelay = seconds * 1000
    const start = Date.now()
    let now = Date.now();

    while ((now - start) < millisecondDelay) {
        now = Date.now();
        // busy wait
        for (let i = 0; i < 1000; i++) { }
    }
}

async function main(workbook: ExcelScript.Workbook) {
    let sheet = workbook.getActiveWorksheet();
    for (let i = 0; i < 60; i++) {
        await sheet.calculate(true);
        sleep(1);
    }
}

相关问题