我嘗試了“for回圈”和“do ... while ...”,它們都在回圈程序的中間停止,回圈之后的其余代碼沒有運行。當我遍歷數百行時,這成為一個問題。
我知道使用陣列是一個更好的解決方案,因為代碼執行速度更快,但我很難批量設定邊框,因為 Google 表格中沒有“.setBorders(Array)”函式。
此處提供的作業表已被簡化,僅用于顯示回圈問題。實際作業表的撰寫是為了自動創建數百個具有不同值、字體粗細和水平對齊方式的表格。
我想做的事:
- 選擇“Yes”選項開始回圈(當前回圈的行也被跟蹤并記錄在“CURRENT ROW”中,“STATUS”顯示“Processing ...”)
- 程式將檢查“SCORE”列,如果“SCORE”為空(“”),則該行的字體粗細設定為“bold”,否則,字體粗細設定為“normal”
- 如果回圈完成直到最后一行,“狀態”顯示“完成”。
以下是 Google App Script 的副本:
let app = SpreadsheetApp;
let ss = app.getActiveSpreadsheet();
let activeSheet = ss.getActiveSheet();
let sheetName = activeSheet.getName();
let sheet1 = ss.getSheetByName("Sheet1");
let loopOptionRange = sheet1.getRange(4, 4);
let loopOption = loopOptionRange.getValue();
let loopStatusRange = sheet1.getRange(4, 7);
function onEdit(e) {
}
function onOpen() {
loopOptionRange.setValue("Choose");
sheet1.getRange(4, 5).setValue(5);
loopStatusRange.setValue("");
}
function loopTest() {
const startRow = 4; //table head
const lastRow = sheet1.getLastRow();
sheet1.getRange(4, 6).setValue(lastRow);
const startRowLoop = startRow 1; //first row of looping
try {
for (i = startRowLoop; i <= lastRow; i ) {
const testStatus = sheet1.getRange(i, 3).getValue();
sheet1.getRange(4, 5).setValue(i);
if (testStatus == "") {
sheet1.getRange(i, 1, 1, 2).setFontWeight("bold");
} else {
sheet1.getRange(i, 1, 1, 3).setFontWeight("normal");
}
}
loopStatusRange.setValue("Done");
loopOptionRange.setValue("Choose");
} catch (error) {
app.getUi().alert(`An error occured.`);
}
}
if (sheetName === "Sheet1"){
if (loopOption == "Yes") {
loopStatusRange.setValue("Processing ...");
loopTest();
} else if (loopOption === "Cancel") {
loopOptionRange.setValue("Choose");
}
}
回圈測驗 - Google 表格檔案
uj5u.com熱心網友回復:
當我看到你的腳本時getValue,setValue和setFontWeight被回圈使用。在這種情況下,處理成本會變高。我認為這可能是您的問題的原因。為了降低你的腳本的處理成本,下面的修改怎么樣?
從:
for (i = startRowLoop; i <= lastRow; i ) {
const testStatus = sheet1.getRange(i, 3).getValue();
sheet1.getRange(4, 5).setValue(i);
if (testStatus == "") {
sheet1.getRange(i, 1, 1, 2).setFontWeight("bold");
} else {
sheet1.getRange(i, 1, 1, 3).setFontWeight("normal");
}
}
至:
const range = sheet1.getRange(startRow, 3, lastRow - startRowLoop);
const values = range.getDisplayValues().map(([c]) => [c ? null : "bold"]);
range.offset(0, -1).setFontWeights(values);
筆記:
- 關于
Is it really because of "the high process cost" you mentioned in your answer?,當我第一次看到您的腳本時,我認為您的問題的原因可能是由于流程成本。因為,當腳本由 OnEdit 觸發器運行時,最長執行時間為 30 秒。而且,當我測驗您的腳本和電子表格時,當我看到腳本停止后的日志時,出現與最大執行時間結束有關的錯誤。由此,我得出您的問題的原因是由于腳本的處理成本。
參考:
- 地圖()
- 設定字體權重(字體權重)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/481506.html
下一篇:如何使用for回圈列印偶數?
