我的Google脚本生成的数据会放入“ sheet6”中。然后,工作表会处理这些数据,因此我想跟踪每次迭代(k)的结果。我将得到的(“传递”)数据返回到脚本,但这每次迭代都花费大量时间。我知道像这样使用getValue是不好的做法。我认为一种更好的方法是先将工作表中的任何“数据更改”保持跟踪,然后再将任何内容传递回我的脚本。问题是脚本执行速度很快,但是Google表格的计算过程却很慢。有什么方法可以将数据从脚本传递到工作表,等待,让工作表在脚本进入下一个场景之前进行计算?
function RunScenarios() {
function shuffleArray(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
var aa = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Run Program");
var scenarios = aa.getRange('H19').getValue();
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet6");
var range = ss.getRange("b14:av14");
var m = 0
var picks = [];
for(var k = 1; k <= scenarios; k++) {
if (m = 47) {
m = 0
}
for(var j = 1; j < 48; j++) {
var array1 = [1+m, 2+m, 3+m, 4+m, 5+m, 6+m, 7+m, 8+m, 9+m, 10+m, 11+m, 12+m, 13+m, 14+m, 15+m, 16+m, 17+m, 18+m, 19+m, 20+m];
shuffleArray(array1);
picks = addToPicks(array1,picks);
m = m + 1
}
ss.getRange(6, 2, 1, 47).setValues([picks]); // passing all the picks to the sheet
picks = [];
var passingscenarios = aa.getRange('passing').getValue(); // getting the result from the sheet takes a lot of time
// Eventually, I want to keep track of how many passingscenarios I've got here before exiting
}
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1').activate();
spreadsheet.getSheetByName('Chart4').showSheet()
.activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Chart4'), true);
}
function addToPicks(arr,picks) {
if (picks.indexOf(arr[0]) === -1) {
picks.push(arr[0])
return picks
}
arr.shift();
return addToPicks(arr,picks);
}
答案 0 :(得分:2)
要在Apps脚本中插入暂停,请使用Utilities.sleep(milliseconds),但首先您还可以添加SpreadsheetApp.flush(),以确保脚本所做的更改已传递到电子表格。