Javascript For循环中的Deleterow()未删除gsheet上的正确行

Javascript For循环中的Deleterow()未删除gsheet上的正确行,javascript,for-loop,google-apps-script,google-sheets,Javascript,For Loop,Google Apps Script,Google Sheets,无法找到为什么不删除正确的行: 我(在头脑中)已经把所有可能的组合都考虑过了 请让我知道缺陷在哪里。谢谢 deleteRow需要row编号,而i是数组的索引。数组索引从0开始,而行索引从1开始 source.deleteRow(i+1); 如果满足productCode和productVersao标准,下面是要删除的行的屏幕截图。请参见粗体列: 这是删除上面的一行。我尝试了I+1,但效果相同。我需要看一张你的工作表的图像,只是添加了一张屏幕截图。你能编辑你的答案以反映这一点吗?请在values

无法找到为什么不删除正确的行: 我(在头脑中)已经把所有可能的组合都考虑过了


请让我知道缺陷在哪里。谢谢

deleteRow
需要
row
编号,而
i
是数组的索引。数组索引从0开始,而行索引从1开始

source.deleteRow(i+1);
如果满足productCode和productVersao标准,下面是要删除的行的屏幕截图。请参见粗体列:

这是删除上面的一行。我尝试了I+1,但效果相同。我需要看一张你的工作表的图像,只是添加了一张屏幕截图。你能编辑你的答案以反映这一点吗?请在values.length附近去掉()?对于(var i=values.length-1;i>=0;i--){if(values[i][0]==productCode&&values[i][2]==productVersao){source.deleteRow(i+2);}这对我来说是有效的。你能告诉我怎么做吗?我总是看startRow的数据。通常,通过确定数据的起始位置可以很容易地确定要删除的行。如果获取整个dataRange(),则起始行为1,如果i=0且起始行为1,则当前要删除的行必须为i+1。但一般来说,它几乎总是i+起始行数。请记住,数组从零开始索引,行从一开始。但是如果行的第一个范围是2,那么当i=0时,行必须是2,因此i+2。
source.deleteRow(i+1);
function deleteItem() { 
  var sourceSheet = 'ArquivoItens';
  var destinationSheet = 'EditarItem';
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var source = ss.getSheetByName(sourceSheet);
  var LastRowSource = source.getLastRow();
  var LastColumnSource = source.getLastColumn();
  //LastRowSource-startrow+1
  var values = source.getRange(2,1,LastRowSource-1,LastColumnSource).getValues();
  var csh = ss.getSheetByName(destinationSheet);
  var productCode = csh.getRange("W5").getValue();
  var productVersao = csh.getRange("AC4").getValue();

  for (var i = values.length-1; i >= 0; i--) {
    if (values[i][0] == productCode && values[i][2] == productVersao) {
      Logger.log(values[i]);
      source.deleteRow(i+2);//i+startrow which is two in this case
      }
    }
}