shy*_*yuu 0 excel typescript office-scripts
我使用以下代码来更新单元格 A1 但它不起作用:
function main(workbook: ExcelScript.Workbook) {
let worksheet = workbook.getWorksheet("Sheet1");
var i: number = 0;
while (true) {
worksheet.getRange("A1").setValue(i);
i = i + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
代码运行时什么也没发生。
但是,如果我添加不相关的行
console.log("abc")
Run Code Online (Sandbox Code Playgroud)
在循环的末尾,如下所示:
function main(workbook: ExcelScript.Workbook) {
let worksheet = workbook.getWorksheet("Sheet1");
var i: number = 0;
while (true) {
worksheet.getRange("A1").setValue(i);
i = i + 1;
console.log("abc");
}
}
Run Code Online (Sandbox Code Playgroud)
一切都会顺利进行。
那么,这里到底发生了什么?
为了提高性能,Office 脚本仅在您与脚本“同步”后才发布脚本的结果。console.log()是强制这样做的方法之一,但还有其他方法。
从Excel 中的 Office 脚本 > 疑难解答 > 提高脚本性能(重点是我的):
删除不必要的
console.log语句控制台日志记录是调试脚本的重要工具。但是,它确实强制脚本与工作簿同步,以确保记录的信息是最新的。在共享脚本之前,请考虑删除不必要的日志记录语句(例如用于测试的日志记录语句)。这通常不会导致明显的性能问题,除非该
console.log()语句位于循环中。
同样,来自文章避免在循环中使用 context.sync 方法:
通常,最好
context.sync在应用程序方法的结束“}”字符run(例如Excel.run、Word.run等)之前放置一个结尾。这是因为当且仅当存在尚未同步的排队命令时,该run方法才会进行隐藏调用,作为它执行的最后一件事。context.sync该调用是隐藏的这一事实可能会令人困惑,因此我们通常建议您添加显式context.sync. 然而,考虑到本文是关于最小化 的调用context.sync,添加完全不必要的 Final 实际上会更令人困惑context.sync。因此,在本文中,当运行结束时没有未同步的命令时,我们将其省略。
仅当工作簿同步时,您的 Office 文档才会明显更新。这会在context.sync运行时发生,这会在脚本末尾隐式发生;当您发出诸如 之类的同步命令console.log时也会发生这种情况。如果您要使循环有限而不是无限,那么当达到循环限制时,您的脚本将自动同步,并且您的工作簿将适当地更新一次。
console.log如果您想看到部分进度,您还可以使用或在脚本中间强制更新context.sync,但您应该意识到这些调用的成本很高,您可能需要小心地尽量减少使用它们,如链接的文章。
| 归档时间: |
|
| 查看次数: |
892 次 |
| 最近记录: |