Google工作表脚本(javascript)比较循环忽略电子表格中的底部2行

时间:2018-01-22 20:31:20

标签: javascript google-sheets

我编写了一个脚本,用于比较两个工作表之间的行,并删除第二个工作表上的所有匹配行(名为“temp”)。我将循环设置为在temp和decment结束时开始,向顶部工作。该脚本有效,但它忽略了'temp'的底部两行...我该如何解决这个问题?我想确保当它们匹配来自另一个工作表的数据集时,它将删除temp上的底部两行。

我已经确认底部的两行实际上是重复的,应该被脚本捕获并删除。

脚本:

function trimTempSheet() {

  var ss, s, s1, dt;
  var dirname='X DIR'
  var fs, f, fls, fl, name;
  var ncols=1,i, newRows, rw;

  ss=SpreadsheetApp.getActiveSpreadsheet();
  s=ss.getSheetByName('Report Results');

  name = 'temp';

  //Load current sheet to compare  
  var currentDataSet = s.getRange("A:S").getValues(); //Ignore final columns
  var newSheet = ss.getSheetByName(name);

 //Load imported data to compare
  var newData = newSheet.getRange("A:S").getValues();
  var headers = newData.shift();

//Create empty array to store data to be written [to add later]
    newRows=[];

//Compare data from newData with current data
  for(var i = newData.length-1; i > 0; --i) 
       { 

for(var j in currentDataSet)
  {
         if(newData[i].join() == currentDataSet[j].join()  )
    {
        newSheet.deleteRow(i);
     }
  }
          }

2 个答案:

答案 0 :(得分:0)

这次修改怎么样?

来自:

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

致:

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

注意:

  • 关于“临时'的底部两行”,
    • 通过上述修改,将一个循环添加到for循环中。
    • 在您的脚本中,newData删除了var headers = newData.shift();的第一个元素。这样,newData减少了一个元素。
      • 例如,如何删除此行?

如果这个修改对你没用,我很抱歉。那时,你能告诉我们你的样本电子表格吗?

答案 1 :(得分:0)

我不知道强制脚本首先查看并删除最后一行的最佳方法,而不是跳过它。所以我将删除行更改为“newSheet.deleteRow(i + 1);”

这会根据我的迭代循环产生任何意外的行删除吗?我不是google脚本处理数组的专家。我假设循环将按顺序检查newData(名为'temp)的表中的行,从最后一行到第一行。在这种情况下我的解决方案是可以接受的但我不确定这一点。