首先,这是我尝试开始工作的代码:
function moveChecked(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetSrc = ss.getSheetByName("combo (latest)");
var sheetTgt = ss.getSheetByName("combo (corrected)")
var sheetSrcData = sheetSrc.getDataRange().getValues();
var i, j;
var valuesC = new Array();
var rowsC = new Array();
var rowsCk = 0;
// Find rows label as [c]reate
for(i=0; i<sheetSrcData.length; i++){
if(sheetSrcData[i][84] == "c"){
for(j=0; j<86; j++){ // 86th is the CH column
valuesC[j] = sheetSrcData[i][j]
}
sheetTgt.appendRow(valuesC);
rowsC[rowsCk] = i+1;
rowsCk++;
}
}
// Delete moved rows from `sheetSrc`
for(i=0; i<rowsCk.length; i++){
sheetSrc.deleteRow(rowsC[i]);
}
}
代码的最后一部分,我尝试删除移动/复制到另一个工作表(sheetTgt
)的行,根本不删除任何行,即它确实删除了行。但是,rowsC
数组确实包含我需要删除的所有行。整个代码运行没有错误。
答案 0 :(得分:2)
deleteRow需要一个整数作为参数,它引用从1开始的行位置。
要一次删除多个连续行,您可以使用deleteRows。
要删除多个非连续行,请删除要删除的行号数组,然后使用循环或数组方法(如forEach)来使用deleteRow(rowNumber)
,其中rowNumber是一个变量来处理行的行位置被删除。
重要说明:以相反的顺序循环数组,以避免必须调整待删除行的行位置。
答案 1 :(得分:2)
rowsCk
是一个整数而不是数组,因此没有length属性。 尝试更改:
// Delete moved rows from `sheetSrc`
for(i=0; i<rowsCk.length; i++){
致:
// Delete moved rows from `sheetSrc`
rowsC.reverse(); //array reversed
for(i=0; i<rowsC.length; i++){ //k removed