Google apps script Google应用程序脚本-删除大型电子表格中的重复项
使用Google的基本教程代码可以很好地删除GoogleSheets中的重复项。然而,由于最长执行时间是6分钟,我遇到了具有数千行的大型电子表格的timedout问题。如何修改此代码以处理更大的电子表格?例如,如何设置从底部开始迭代的最大行数 代码如下: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()
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),并在列重复时删除行吗?例如,如果您选择标题行并选择一列,这将像数据下的内置删除重复项一样工作。
,当使用模式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());
}