应用脚本执行.setValues()需要20秒

时间:2018-02-06 13:01:40

标签: javascript google-apps-script

我很难理解为什么执行这么长时间以及是否有解决方案。它需要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()似乎可以非常快速地更新工作表,但在继续之前它会继续运行不可见的东西。

1 个答案:

答案 0 :(得分:0)

这是我提出的可能的解决方案/解决方法。

将数组写入Google Doc进行临时存储只需0.06秒,而不是20秒将其存储在表格中!

我认为这可能是一个非常大的数组,但我还没有测试这个变通方法的限制。但是,我尝试打开Goog​​le文档,这是不可能的。但是没有必要打开它。

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