javascript - Google Apps 表格跳过 if 语句

标签 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

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

我再次对此感到陌生,因此我们将不胜感激任何帮助。

最佳答案

这是一个工作脚本:

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 数组,扫描其是否有重复项
  • 将单独的表写入另一个表可能是个好主意,这样,如果您遇到意外问题,您可以轻松使用原始数据

关于javascript - Google Apps 表格跳过 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50748831/

相关文章:

JavaScript 和企业

javascript - Google Apps 脚本中的时区不正确

javascript - 如何从 Google 表单提交触发器函数访问电子表格

javascript - Google 表格 API v4 : Add named or protected ranges

javascript - 使用 API 级别 18 的 Android WebView 评估 Javascript

javascript - 将值添加到单元格内下拉列表

javascript - 字符串以 Google Script 开头

google-sheets - 使用 OR 的 Google 电子表格多列过滤器

javascript - Ext js 编码标准/最佳实践

javascript - 如何在 Google 脚本编辑器之外访问定义的函数?