谷歌脚本空数组返回"转置"

时间:2018-03-26 04:49:45

标签: google-apps-script

我正在尝试编写一些代码(作为大量代码的一部分),打开不同的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来跳过它。

0 个答案:

没有答案