我正在尝试编写一些代码(作为大量代码的一部分),打开不同的Google表格,循环浏览该表格中的所有标签,并删除重复项。我的基础是Google's tutorial,这是我到目前为止所做的:
function removeDuplicates() {
var book = SpreadsheetApp.openById("[sheet id]").getSheets();
for (var s = 0; s <= book.length; s++){
var sheet = book[s];
var data = sheet.getDataRange().getValues();
var newData = new Array();
for(i in data){
var row = data[i];
var duplicate = false;
for(j in newData){
if(row.join() == newData[j].join()){
duplicate = true;
}
}
if(!duplicate){
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
}
我面临的问题是,在第二个循环(for(j in newData)
),第一次迭代返回j =&#34;转置。&#34;
编辑:这导致if(row.join() == newData[j].join())
出错:&#34;无法在对象中找到函数连接。&#34;
我已经使用正在编辑的工作表中运行的代码(基本上是复制粘贴)对此进行了测试,并建议此时j = 0。我想也许newData
数组仅限于运行代码的工作表?
我希望我已经清楚了,我对此非常陌生,所以我仍然在寻找自己的方式。我们也欢迎其他工作方式!
更新:我在某种程度上重新编写了代码,并将其付诸实践:
function removeDuplicates() {
var book = SpreadsheetApp.openById("[sheet id]").getSheets();
for (var s = 0; s <= book.length-1; s++){
var sheet = book[s];
var data = sheet.getDataRange().getValues();
var chkData = [];
var newData = [];
for(i in data){
if(i != "transpose"){
var row = data[i];
var duplicate = false;
if(chkData.indexOf(row.join())!=-1){
duplicate = true;
}
if(!duplicate){
chkData.push(row.join())
newData.push(row);
}
}
}
sheet.getDataRange().clearContent();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}
}
我使用indexOf
方法而不是嵌套循环。仍然得到一个&#34;转置&#34;在最后一次迭代中,所以不得不放入if来跳过它。