Google apps script Google应用程序脚本-删除大型电子表格中的重复项

Google apps script Google应用程序脚本-删除大型电子表格中的重复项,google-apps-script,google-sheets,duplicates,Google Apps Script,Google Sheets,Duplicates,使用Google的基本教程代码可以很好地删除GoogleSheets中的重复项。然而,由于最长执行时间是6分钟,我遇到了具有数千行的大型电子表格的timedout问题。如何修改此代码以处理更大的电子表格?例如,如何设置从底部开始迭代的最大行数 代码如下: function removeDuplicates() { var sheet = SpreadsheetApp.getActiveSheet(); var data = sheet.getDataRange().getValues()

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

代码如下:

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);
}

我相信你的目标如下

  • 您想删除重复的行
  • 您希望使用谷歌应用程序脚本实现这一点
  • 您希望降低脚本的处理成本
在本例中,我认为
removeDuplicates()
可能用于实现您的目标。示例脚本如下所示

示例脚本: 或者,在这种情况下,也可以按如下方式使用API表。当上述脚本对您的情况不适用时,请测试以下脚本。当使用API时,可以稍微降低工艺成本。在使用此功能之前,请在Advanced Gooele services上启用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());
}
参考资料:

这是否回答了您的问题?虽然我不确定是否能正确理解你的情况,但我还是提出了一个答案。你能确认一下吗?如果这不是你期望的结果,我很抱歉。这很有效!非常感谢。你知道我怎样才能使它只比较某一列(在本例中为G)并在列重复的情况下删除行吗?例如,如果您选择标题行并选择一列,这将与“数据”下的内置删除重复项类似。@Michael Hawk感谢您的回复。我很高兴你的问题解决了。关于你的新问题
,你知道我怎样才能使它只比较某一列(在本例中为G),并在列重复时删除行吗?例如,如果您选择标题行并选择一列,这将像数据下的内置删除重复项一样工作。
,当使用模式1时,
SpreadsheetApp.getActiveSheet().getDataRange().removeDuplicates([7])
?如果我误解了你的新问题,我道歉。这太完美了!非常感谢你。如果你不介意的话,我还有最后一个问题。您如何让它删除每张工作表的重复,而不仅仅是当前活动工作表?@Michael Hawk感谢您的回复。我很高兴你的两个问题都解决了。我愿意支持你。但是回答的问题是新问题,这与你的问题不同。你能把它作为新问题发布吗?因为当你的初始问题被评论改变时,看到你的问题的其他用户会感到困惑。通过将其作为新问题发布,包括我在内的用户可以想到它。如果你能合作解决你的新问题,我很高兴。你能合作解决你的新问题吗?当然!谢谢
function removeDuplicates2() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const resource = { requests: [{ deleteDuplicates: { range: { sheetId: sheet.getSheetId() } } }] };
  Sheets.Spreadsheets.batchUpdate(resource, ss.getId());
}