【问题标题】:gApps script: deleteRow() does not workgApps 脚本:deleteRow() 不起作用
【发布时间】:2018-05-25 18:23:07
【问题描述】:

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

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

【问题讨论】:

  • 错误是什么?执行记录是怎么说的?也可以尝试rowsC.reverse()从下往上开始。
  • “它不起作用”不是充分的问题描述。 stackoverflow.com/help/how-to-ask
  • @I'-'我,没有错误,它运行没有错误,但没有删除我需要它删除的那些行。
  • @tehlowch,很抱歉,如果根据您或规则还不够,但在我看来,如果某些内容应该 删除 某些行并且它没有工作,这句话暗示问题在于不删除那些行。你不觉得吗?
  • @tukusejssirs 那部分是显而易见的。但不明显的是它是否有效,但以您不想要的方式 - 例如删除“错误”(对您而言)行,不删除任何行,抛出错误等。所有这些都符合“它不行。”要求有问题的人详细说明并具体说明预期和实​​际发生的情况是正常的。

标签: google-apps-script google-sheets


【解决方案1】:
  • rowsCk 是整数而不是数组,因此没有长度属性。
  • 删除行时,从底部开始,避免改变行的行号,以后要删除的行。

尝试更改自:

// 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

【讨论】:

    【解决方案2】:

    deleteRow 需要一个整数作为参数,它指的是从 1 开始的行位置。

    要一次删除多个连续行,您可以使用deleteRows

    要删除几个不连续的行,创建一个要删除的行号数组,然后使用循环或像 forEach 这样的数组方法来使用 deleteRow(rowNumber) 其中 rowNumber 是一个变量,用于处理要删除的行的行位置已删除。

    重要提示:以相反的顺序循环数组以避免必须调整待删除行的行位置。

    【讨论】:

    • 虽然我需要删除几行,但它们不是连续的。例如,它们可能是第 5、10、560、589 行。因此,deleteRows 函数对我没有帮助。
    • @tukusejssirs 请将其添加到您的问题中,以明确您在寻找什么。
    • 无论如何,我的回答解释了为什么你的代码不起作用:它没有使用正确的语法。
    • 是的,现在您的回答基本上与other 回答相同,因此它是正确的。但是,它很快就被回答了,因此我将其保留为正确答案。
    • @tukusejssirs : 你可以选择更让你满意的答案,只要记住勾号的意思是“接受的答案”而不是“正确的答案”(如果答案不正确并且没有帮助,然后投反对票,如果有帮助,投赞成票):)
    猜你喜欢
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    相关资源
    最近更新 更多