我使用以下代碼更新單元格 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;
}
}
運行代碼時什么也沒發生。
但是,如果我添加一個不相關的行
console.log("abc")
在回圈結束時,如下所示:
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");
}
}
一切都會順利進行。
那么,這里究竟發生了什么?
uj5u.com熱心網友回復:
為提高性能,Office Scripts 僅在您與腳本“同步”后發布其結果。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,但您應該意識到這些呼叫很昂貴,并且您可能需要小心地盡量減少使用它們,如鏈接的文章。
uj5u.com熱心網友回復:
上面的答案是正確的,盡管我想對 context.sync 進行一些說明。Office Scripts 提供了一個同步 API,它不需要用戶顯式執行同步操作(并且不公開背景關系物件)。連續寫入確實都是批量發送一次。在您的初始樣本中,您只是永遠添加到批次中。對作業簿的任何 console.log 或讀取操作都將強制同步發生,您將看到在該點之前已批量處理的寫入操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/377346.html
下一篇:回圈遍歷合并單元格下的相鄰單元格
