亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲取正在循環的數組的行號?

如何獲取正在循環的數組的行號?

揚帆大魚 2023-05-19 14:51:39
使用 Google AppScripts 并在網上找到了這個我修改過的腳本。注意:電子表格有標題。運行在第 3 列中找到的值如果任何值包含單詞“USD”,則將整行復制到“目標表”復制完成后刪除該行繼續循環直到找到下一個“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 Filevar range = ss1.getRange(1, 1, lr, lc);var data = range.getValues();// loops through rows in datafor (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])  }
查看完整描述

1 回答

?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

解釋:

迭代刪除工作表中行的一種方法是創建一個向后 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) {

  ss1.deleteRow(i+2);

} else {

ss1.deleteRow(i)

             }

但實際上,您不需要首先包含標頭。請改用: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

 

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(2, 1, lr, lc); // <- modification

var data = range.getValues();


// loops through rows in data

for (var i = data.length - 1; i >= 0; i--)

 {

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

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


 var rowToCopy = data[i];

 ss2.appendRow(rowToCopy);

    

 ss1.deleteRow(i+2); // <- new code

    

  }; 

}; // end i

}


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

    cashCopy(etfar[i])

  }


查看完整回答
反對 回復 2023-05-19
  • 1 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號