【发布时间】:2018-04-08 09:30:59
【问题描述】:
我正在尝试优化一个 Google Apps 脚本,它反向迭代电子表格中的行(从下到上)。如果过去 15 天,该脚本会检查行中的第一个单元格,并且还会检查第 12 列的字符串“是”,如果两个条件都为真,则该行从一张纸移动到另一张纸。
我遇到的问题是我超过了分配的时间(6 分钟),遍历了 2500 行的所有数据,并且预计会变得更大。
我确信类似的问题已经在这里回答过很多次了,但是鉴于我目前的编程技能水平,我无法应用在这里找到的解决方案。任何帮助将不胜感激。
这是表格的格式:
1st column 12th column
+-----------+-----/ /-----+-------------+
| Date | | Refunded? |
+-----------+-----/ /-----+-------------+
| 8/29/2017 | | YES |
+-----------+-----/ /-----+-------------+
| 9/26/2017 | | NO |
+-----------+-----/ /-----+-------------+
这是脚本:
function myFunction() {
// get compare date (15 days from current date
var compareDate = new Date().getTime() - (15 * (1000 * 60 * 60 * 24));
// get sheets in spreadsheet
var target = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
var arr = [];
// get 1st sheet data
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var values = sheet.getDataRange().getValues();
var r = values.length;
// logic
while (r >= 1) {
if (values[r] && values[r][0].getTime() < compareDate && values[r][12].toLowerCase() == "yes" ) {
arr.push(values[r])
sheet.deleteRow(r + 1)
}
r--;
}
target.getRange(target.getLastRow() + 1, 1, arr.length, arr[0].length).setValues(arr.reverse())
}
如果我注释掉以下代码行“sheet.deleteRow(r + 1)”,脚本几乎立即完成,因此这似乎是减慢脚本执行速度的罪魁祸首。这个问题会有更有效的解决方案吗?
【问题讨论】:
-
可以尝试两个临时数组,一个用于您要保留的行,另一个用于您要删除的行。然后只需像你一样将删除数组添加到第二页并使用keeper数组清除第一页和第一页上的setValues()。
标签: javascript optimization multidimensional-array google-apps-script google-sheets