Google Apps Sheets跳过if语句

时间:2018-06-07 19:25:52

标签: javascript google-apps-script google-sheets

我正在为我的公司制作一个脚本,以便它可以删除重复的条目。我从一个混合的资源中抨击它,因为我对此很陌生。此代码假设创建一个包含所有非重复条目的数组,清除整个工作表,然后粘贴到没有重复项的数组中。就目前而言,它只是用第一个单元替换了工作表上的所有内容。

我发现了这个:

    if(!duplicate){
      newData.push(row);
    }

根本没有激活代码。

到目前为止,这是我的整个代码:

function removeDuplicates(Email, data) {
  var sheet = SpreadsheetApp.getActiveSheet();
  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[Email] == newData[j][1]){
        duplicate = true;
      }
    }
    if(!duplicate){
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length)
      .setValues(newData);
}

Image of before and after running the script so far

在我运行脚本之前和之后,工作表现在看起来像“BEFORE”部分。

我再次对此不熟悉,所以任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:1)

这是一个工作脚本:

FIELDS = {
  FIRST: 0,
  LAST: 1,
  EMAIL: 2,
  EXTRA_STUFF: 3,
};

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data');
  var data = sheet.getDataRange().getValues();
  var newData = [];
  for (var i = 0; i < data.length; i++) {
    var duplicate = false;
    for (var j = 0; j < newData.length; j++) {
      if (data[i][FIELDS.EMAIL] == newData[j][FIELDS.EMAIL]) {
        duplicate = true;
        break;
      }
    }
    if (!duplicate) {
      newData.push(data[i]);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length)
      .setValues(newData);
}

使用您的数据,结果如下:

+-------+-------------+----------------------+-------------+
| First |    Last     |        Email         | Extra Stuff |
+-------+-------------+----------------------+-------------+
| Joe   | Hays        | jhays@---.com        | abc123      |
| Joe   | Whitten     | jwhitten@---.com     | abc123      |
| Caleb | Christopher | cchristopher@---.com | abc123      |
| Matt  | Davis       | mdavis@---.com       | abc123      |
+-------+-------------+----------------------+-------------+

关于注意事项的一些注意事项:

  • FIELDS = {
    • 我喜欢使用对象将列记录为常量
    • 这使得阅读特定列的代码更容易阅读
    • 这可以通过实现一个通过解析工作表的第一行来构建等效对象的函数来实现自动化
  • function removeDuplicates() {
    • 没有必要一目了然地将参数传递给这个函数理解
  • for (var i = 0; i < data.length; i++) {
    • 使用跟踪索引的变量
    • 遍历数组
  • for (var j = 0; j < newData.length; j++) {
    • 内部循环需要搜索newData数组,以扫描它是否重复
  • 将另一张表格写入另一张表格可能是个好主意,如果您遇到意外问题,可以随时轻松获取原始数据