google-apps-script - Google Apps 脚本 - 删除大型电子表格中的重复项

标签 google-apps-script google-sheets duplicates

使用 Google 的基本教程代码可以很好地删除 GoogleSheets 中的重复项。但是,由于最大执行时间为 6 分钟,我遇到了具有数千行的较大电子表格的超时问题。我如何才能修改此代码以使用更大的电子表格?例如,如何设置从底部开始迭代的最大行数?

这是代码:

function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newData = [];
  for (var i in data) {
    var row = data[i];
    var duplicate = false;
    for (var 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);
}

最佳答案

我相信你的目标如下。

  • 您想删除重复的行。
  • 您想使用 Google Apps 脚本实现这一目标。
  • 您想降低脚本的处理成本。

在这种情况下,我认为 removeDuplicates() 可能会用于实现您的目标。示例脚本如下。

示例脚本:

function removeDuplicates() {
  SpreadsheetApp.getActiveSheet().getDataRange().removeDuplicates();
}

或者,在这种情况下,也可以按如下方式使用 Sheets API。当上述脚本对您的情况没有用时,请测试以下脚本。使用Sheets API时,流程成本可以降低一点。 Ref在使用之前,请在 Advanced Gooele 服务中启用 Sheets API。

function removeDuplicates2() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const resource = { requests: [{ deleteDuplicates: { range: { sheetId: sheet.getSheetId() } } }] };
  Sheets.Spreadsheets.batchUpdate(resource, ss.getId());
}

引用资料:

关于google-apps-script - Google Apps 脚本 - 删除大型电子表格中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67202956/

相关文章:

html - 更改行中间的 GMail 文本颜色

javascript - 在 Google Sheets 应用程序脚本中使用正则表达式查找替换不起作用

google-apps-script - 带编码的 Google Sheets IMPORTDATA

google-apps-script - 当公式更改单元格值时触发脚本

google-apps-script - Google 脚本 - 将二维数组的一部分应用于工作表

从另一个向量中删除向量中第一次出现的元素

javascript - 在 GAS 中,通过循环读取电子表格中多张数据的 col

javascript - 如何将数据从 Google 电子表格检索到 Javascript 或 JSON?

java - 为什么java有很多重复的方法?

java - ES删除重复项