【发布时间】:2023-02-16 20:39:18
【问题描述】:
我有一个具有自定义函数和任务窗格的 Excel 加载项。我的客户使用我的自定义函数创建了一个包含多个工作表的工作簿,在当前工作簿中调用了大约 3500 多个函数。当用户打开此工作簿时,我需要重新计算工作表,以便只重新计算我的函数。为完成此任务,我执行了以下步骤。
-
在工作簿中的工作表上循环。
-
使用 worksheet.findAllOrNullObject() 函数在每张工作表中搜索我的公式。
-
如果搜索结果不是 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