Javascript 应用程序脚本执行.setValues()需要20秒
我很难理解为什么这需要如此长的时间来执行,以及是否有解决方案。执行.setValues()行需要20秒。网格大约是2000(行)乘100(列)个单元格 这里有一个链接到测试材料的链接,就像我的数据集一样Javascript 应用程序脚本执行.setValues()需要20秒,javascript,google-apps-script,Javascript,Google Apps Script,我很难理解为什么这需要如此长的时间来执行,以及是否有解决方案。执行.setValues()行需要20秒。网格大约是2000(行)乘100(列)个单元格 这里有一个链接到测试材料的链接,就像我的数据集一样 function test() { var active = SpreadsheetApp.getActiveSpreadsheet(); var logs_sheet = active.getSheetByName("Logs"); logs_sheet.appen
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()似乎可以很快地更新工作表,但在继续之前,它会继续运行一些不可见的内容。我提出了一个可能的解决方案/解决方法 将数组写入Google文档进行临时存储只需0.06秒,而不是将其存储在工作表中需要20秒 我假设这可能是一个相当大的阵列,但是我还没有测试这个变通方法的限制。然而,我确实试着打开谷歌文档,这是不可能的。但是没有必要打开它
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对于谷歌电子表格,这是一个巨大的网格。任何新电子表格的默认行数仅为100。如果您转到View->Execution Transcript,您将看到,即使像appendRow()这样简单的方法,在getValues()运行4秒时也要花费几乎一秒钟的时间来执行。在Excel中,可以让公式几乎在一秒钟内填充40k行。GoogleSheets是一种云服务,它仍然有很多性能限制。这个例子我可能错了,我希望看到其他人也参与进来。谢谢安东,我想知道网格是否很大。有趣的是,获取值比设置值快得多。为什么会这样?现有值可能是预缓存的,因此调用getValues()只需将它们从缓存中拉出,而不是在运行时遍历每一行和每一列。