我编写了一个脚本,用于比较两个工作表之间的行,并删除第二个工作表上的所有匹配行(名为“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);
}
}
}
答案 0 :(得分:0)
这次修改怎么样?
for(var i = newData.length-1; i > 0; --i)
for(var i = newData.length-1; i >= 0; --i)
newData
删除了var headers = newData.shift();
的第一个元素。这样,newData
减少了一个元素。
如果这个修改对你没用,我很抱歉。那时,你能告诉我们你的样本电子表格吗?
答案 1 :(得分:0)
我不知道强制脚本首先查看并删除最后一行的最佳方法,而不是跳过它。所以我将删除行更改为“newSheet.deleteRow(i + 1);”
这会根据我的迭代循环产生任何意外的行删除吗?我不是google脚本处理数组的专家。我假设循环将按顺序检查newData(名为'temp)的表中的行,从最后一行到第一行。在这种情况下我的解决方案是可以接受的但我不确定这一点。