我在 App 腳本中有一個 for 回圈,它只查看在兩列中有資料的行。我想在實際處理的每一行上設定一個狀態,但是狀態被添加到錯誤的行中。當我添加到 i 時,它會添加到陣列的整個長度,所以我想我不應該嘗試處理每一行,我做錯了什么?
function auditReport() {
var sheetname = "Sheet1"; // name of data sheet ex. Form Responses 1
var colstoworkon = 10; // how many cols are filled with data f.e. by a form
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.setActiveSheet(ss.getSheetByName(sheetname));
var sheet = ss.getSheetByName(sheetname);
var data = sheet.getRange(3,1,sheet.getLastRow()-1,colstoworkon).getValues(); // starting with row 2 and column 1 as our upper-left most column,
//This makes it loops continuously and checks all not done rows
for (var i in data) {
if(data[i][1] && data[i][2]){//if email or copy are undefined just skip
var setStatus = sheet.getRange(i,4).setValue("done")
} // end of if
} // End of Loop
} //End of email function
uj5u.com熱心網友回復:
修改點:
- 在您的腳本中, from
getRange(3,1,sheet.getLastRow()-1,colstoworkon),在這種情況下,它必須是getRange(3,1,sheet.getLastRow()-2,colstoworkon)。 - 的情況下
for (var i in data) {,i是字串型別。 - 當你想使用
sheet.getRange(i,4).setValue("done")時,它是必需的sheet.getRange(Number(i) 3, 4).setValue("done")。- 我認為這可能是您的問題的原因
but the statuses get added to the wrong rows.。
- 我認為這可能是您的問題的原因
- 在 的情況下
if (data[i][1] && data[i][2]) {,如果值為0,data[i][1] && data[i][2]則為false。
當這些點反映到你的腳本中時,它變成如下。
修改后的腳本:
function auditReport() {
var sheetname = "Sheet1";
var colstoworkon = 10;
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.setActiveSheet(ss.getSheetByName(sheetname));
var sheet = ss.getSheetByName(sheetname);
var data = sheet.getRange(3, 1, sheet.getLastRow() - 2, colstoworkon).getDisplayValues();
for (var i in data) {
if (data[i][1] && data[i][2]) {
var setStatus = sheet.getRange(Number(i) 3, 4).setValue("done");
}
}
}
或者,您的腳本也可以進行如下修改。在此修改中,done使用范圍串列放置。這樣,可以稍微降低處理成本。
function auditReport() {
var sheetname = "Sheet1";
var colstoworkon = 10;
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.setActiveSheet(ss.getSheetByName(sheetname));
var sheet = ss.getSheetByName(sheetname);
var data = sheet.getRange(3, 1, sheet.getLastRow() - 2, colstoworkon).getDisplayValues();
var ranges = data.map(([,b,c], i) => b && c ? `D${i 3}` : "").filter(String);
if (ranges.length == 0) return;
sheet.getRangeList(ranges).setValue("done");
}
參考:
- 對于...在
- getRangeList(a1Notations)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/453655.html
