如何获取正在循环的数组的行号?

使用 Google AppScripts 并在网上找到了这个我修改过的脚本。

注意:电子表格有标题。

  1. 运行在第 3 列中找到的值

  2. 如果任何值包含单词“USD”,则将整行复制到“目标表”

  3. 复制完成后删除该行

  4. 继续循环直到找到下一个“USD”……等等。

什么有效: 我成功地能够遍历数组并将正确的行复制到“目标表”

我需要什么帮助: 我不知道如何从原始工作表中删除该行。它总是以删除之前的行结束,然后每次再次循环时跳过 1 行。我已经为这部分代码尝试了多种不同的格式,例如 i-1、i+1 等……不确定我在这里做错了什么:

if (i == 0) {

  ss1.deleteRow(i+2);

} else {

ss1.deleteRow(i)

}

我在下面粘贴了整个脚本:


var etfar = ["Cash File"] //This is a string because I have multiple sheets I'm looping through

 

function cashCopy(etf) {

  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var ss1 = ss.getSheetByName(etf);

  var ss2 = ss.getSheetByName("Target Sheet");

  var lr = ss1.getLastRow();

  var lc = ss1.getLastColumn();


// gets the data in Cash File

var range = ss1.getRange(1, 1, lr, lc);

var data = range.getValues();


// loops through rows in data

for (var i = 0; i < data.length; i++) {

  var check = data[i][2] // ith row, 3rd column

  if (check.includes("USD")) { 


 var rowToCopy = data[i];

 ss2.appendRow(rowToCopy);

    

    if (i == 0) {

      ss1.deleteRow(i+2);

    } else {

    ss1.deleteRow(i)

                 }


  }; 

}; // end i

}


    for (var i = 0; i < etfar.length; i++) {

    cashCopy(etfar[i])

  }


扬帆大鱼
浏览 116回答 1
1回答

神不在的星期二

解释:迭代删除工作表中行的一种方法是创建一个向后&nbsp;for循环。替换:for (var i = 0; i < data.length; i++)与:for (var i = data.length - 1; i >= 0; i--)这样,每删除一行,data仍然会对应到正确的行。另一个问题是你得到var range = ss1.getRange(1, 1, lr, lc)。这意味着,您从第一行(包括标题)开始迭代,然后您使用这样的解决方法:if (i == 0) {&nbsp; ss1.deleteRow(i+2);} else {ss1.deleteRow(i)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}但实际上,您不需要首先包含标头。请改用:var range = ss1.getRange(2, 1, lr, lc)并将if/else语句替换为:ss1.deleteRow(i+2)。因为data索引从 开始0,但您range从 row 开始2。解决方案:var etfar = ["Cash File"] //This is a string because I have multiple sheets I'm looping through&nbsp;function cashCopy(etf) {&nbsp; var ss = SpreadsheetApp.getActiveSpreadsheet();&nbsp; var ss1 = ss.getSheetByName(etf);&nbsp; var ss2 = ss.getSheetByName("Target Sheet");&nbsp; var lr = ss1.getLastRow();&nbsp; var lc = ss1.getLastColumn();// gets the data in Cash Filevar range = ss1.getRange(2, 1, lr, lc); // <- modificationvar data = range.getValues();// loops through rows in datafor (var i = data.length - 1; i >= 0; i--)&nbsp;{&nbsp; var check = data[i][2] // ith row, 3rd column&nbsp; if (check.includes("USD")) {&nbsp;&nbsp;var rowToCopy = data[i];&nbsp;ss2.appendRow(rowToCopy);&nbsp; &nbsp;&nbsp;&nbsp;ss1.deleteRow(i+2); // <- new code&nbsp; &nbsp;&nbsp;&nbsp; };&nbsp;}; // end i}&nbsp; &nbsp; for (var i = 0; i < etfar.length; i++) {&nbsp; &nbsp; cashCopy(etfar[i])&nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript