我很难理解为什么执行这么长时间以及是否有解决方案。它需要20秒来执行.setValues()行。网格大约是2000(行)乘以100(col)单元格。
以下是测试材料test speed sheet的链接,就像我的数据集一样。
function test() {
var active = SpreadsheetApp.getActiveSpreadsheet();
var logs_sheet = active.getSheetByName("Logs");
logs_sheet.appendRow([new Date(), "", "", "STARTING EXECUTION"]);
var test_sheet = active.getSheetByName("Test");
var test_data = test_sheet.getRange(1, 1, test_sheet.getLastRow(), test_sheet.getLastColumn()).getValues();
var combine = test_data.slice();
combine[1].splice(3, 1, new Date());
combine.splice(2017, 1);
combine.splice(0, 0, combine[1]);
logs_sheet.appendRow([new Date(), "", "", "finished combine"]);
test_sheet.getRange(1, 1, combine.length, combine[0].length).setValues(combine);
logs_sheet.appendRow([new Date(), "", "", "FINISHED EXECUTION"]);
}
更多的是,setValues()似乎可以非常快速地更新工作表,但在继续之前它会继续运行不可见的东西。
答案 0 :(得分:0)
这是我提出的可能的解决方案/解决方法。
将数组写入Google Doc进行临时存储只需0.06秒,而不是20秒将其存储在表格中!
我认为这可能是一个非常大的数组,但我还没有测试这个变通方法的限制。但是,我尝试打开Google文档,这是不可能的。但是没有必要打开它。
var doc_database = DocumentApp.openById(" some doc ID here ").getBody();
var old_array = JSON.parse(doc_database.getText());
doc_database.setText('');
// run old_array calcs and updates here
doc_database.setText(JSON.stringify( ... new array here .... ));
希望这个黑客帮助别人。
最佳PAV