【问题标题】:Excel custom functions show BUSY! but async function is not calledExcel 自定义函数显示 BUSY!但不调用异步函数
【发布时间】:2023-02-16 20:39:18
【问题描述】:

我有一个具有自定义函数和任务窗格的 Excel 加载项。我的客户使用我的自定义函数创建了一个包含多个工作表的工作簿,在当前工作簿中调用了大约 3500 多个函数。当用户打开此工作簿时,我需要重新计算工作表,以便只重新计算我的函数。为完成此任务,我执行了以下步骤。

  1. 在工作簿中的工作表上循环。

  2. 使用 worksheet.findAllOrNullObject() 函数在每张工作表中搜索我的公式。

  3. 如果搜索结果不是 NullObject,则调用 ranges.calculate()。哪个应该触发函数调用。

    var sheets = context.workbook.worksheets;
    sheets.load("items/name");
    await context.sync();
    for (var i = 0; i < sheets.items.length; i++) {
        var sheet = sheets.items[i];
        const foundRanges = sheet.findAllOrNullObject(FORMULA_DATA[formula], {
            completeMatch: false,
            matchCase: false
        });
        await context.sync();
        if (!foundRanges.isNullObject) 
            foundRanges.calculate();
            await context.sync();
        }
    }
    

    我面临的问题是,当我调用重新计算函数时,所有引用这些函数的单元格都显示 BUSY!这意味着我的函数还没有解决承诺,但实际上没有函数被调用。我在调试期间在每个函数的开头添加了断点,但没有代码在那里停止(我更改了一个单元格然后断点被击中)。 我启用了运行时日志记录,它有每个呼叫开始的条目,但没有结束呼叫条目。

    此外,将其中一个单元格引用传递给所有函数,如果我更改它的值,则所有函数调用都会正确进行,并根据需要显示结果,并且日志文件包含所有调用的开始和结束条目。

【问题讨论】:

  • 编辑问题以添加代码

标签: excel office-js custom-functions-excel


【解决方案1】:

在彻底调查这个问题后,我得出结论,这个客户端正在使用其他具有相同函数名称的插件,并且它被保存在工作簿中。当我重新计算工作表范围区域时,它试图从之前卸载的那些旧插件中调用函数。因此所有细胞都显示 BUSY!由于 excel 中没有代码,因此这些承诺从未得到解决。一旦我从工作簿中删除所有任务窗格并重新打开它,这个问题就不会再次出现。

保存任务窗格信息

    Office.addin.setStartupBehavior(Office.StartupBehavior.load);

要删除任务窗格信息,请使用文件 => 信息 => 检查问题 => 检查文档 => 检查。

显示结果后,任务窗格加载项 => 全部删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2021-11-28
    相关资源
    最近更新 更多