gApps脚本:deleteRow()不起作用

时间:2018-05-25 18:23:07

标签: google-apps-script google-sheets

首先,这是我尝试开始工作的代码:

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数组确实包含我需要删除的所有行。整个代码运行没有错误。

2 个答案:

答案 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