如何解决删除 Google 表格大数据集中超过 1 年的行
我有一个相当大的数据集,包含大约 40,000 行(每天添加新行)。我想每天运行一个脚本来删除超过 1 年的行。
我一直在使用这个工作正常的,但随着我的数据集变大它超时并且无法运行。
这是我一直在使用的:
function deleteFIVEoh() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("theFIVEoh");
var datarange = sheet.getDataRange();
var lastrow = datarange.getLastRow();
var values = datarange.getValues();// get all data in a 2D array
var currentDate = new Date();//today
var yearOld = Date.now() + -365*24*3600*1000;
for (i=lastrow;i>=3;i--) {
var tempDate = values[i-1][4];// arrays are 0 indexed so row1 = values[0] and col12 =.
[11]
if ((tempDate!="") && (tempDate <= (yearOld)))
{
sheet.deleteRow(i);
}
}
}
我的工作表上的数据总是按升序排序(最旧的条目在顶部)。有什么办法可以让它更快地工作吗?也许只看前 500 行?
提前致谢! -wes
解决方法
由于您的工作表是按升序排序的,因此最好从顶部开始,计算满足条件的行数,然后使用单个 deleteRows()
方法。
function deleteFIVEoh() {
const MS_IN_ONE_YEAR = 365*24*3600*1000;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("theFIVEoh");
var datarange = sheet.getDataRange();
var values = datarange.getValues();// get all data in a 2D array
var currentDate = new Date();//today
var yearOld = new Date(currentDate.getTime() - MS_IN_ONE_YEAR);
for (i = 0; values[i][4] < yearOld; i++) {}
sheet.deleteRows(1,i);
}
单次调用比循环调用 API 快得多,而且这段代码的迭代次数更少,而且不需要遍历整个工作表。
执行前的示例:
执行后的示例:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。