Google apps script 谷歌表单的脚本时间限制
我需要更改大量电子表格中特定表格(LISTAFINAL)相同单元格中的一些公式,这些表格位于同一文件夹中。但它在谷歌脚本6分钟的时间限制下停止了,只在9个电子表格中进行了更改,并发出消息:Google apps script 谷歌表单的脚本时间限制,google-apps-script,google-sheets,google-drive-api,Google Apps Script,Google Sheets,Google Drive Api,我需要更改大量电子表格中特定表格(LISTAFINAL)相同单元格中的一些公式,这些表格位于同一文件夹中。但它在谷歌脚本6分钟的时间限制下停止了,只在9个电子表格中进行了更改,并发出消息:Erro-超过了最大执行时间 我的目标: 我想知道是否有任何方法可以加快这个过程,或者在更多的电子表格中进行更改,或者两者兼而有之。代码如下: function validacao(){ var folder = DriveApp.getFolderById("FOLDER ID");
Erro-超过了最大执行时间
function validacao(){
var folder = DriveApp.getFolderById("FOLDER ID");
var x = folder.getFilesByType(MimeType.GOOGLE_SHEETS);
while (x.hasNext()) {
SpreadsheetApp.open(x.next()).getSheets().forEach(sheet => {
sheet.getRange('LISTAFINAL!F5:F15').activate();
sheet.getRange('LISTAFINAL!F5').setValue('=ALUNO1!$F$167');
sheet.getRange('LISTAFINAL!F6').setValue('=ALUNO2!$F$167');
sheet.getRange('LISTAFINAL!F7').setValue('=ALUNO3!$F$167');
sheet.getRange('LISTAFINAL!F8').setValue('=ALUNO4!$F$167');
sheet.getRange('LISTAFINAL!F9').setValue('=ALUNO5!$F$167');
sheet.getRange('LISTAFINAL!F10').setValue('=ALUNO6!$F$167');
sheet.getRange('LISTAFINAL!F11').setValue('=ALUNO7!$F$167');
sheet.getRange('LISTAFINAL!F12').setValue('=ALUNO8!$F$167');
sheet.getRange('LISTAFINAL!F13').setValue('=ALUNO9!$F$167');
sheet.getRange('LISTAFINAL!F14').setValue('=ALUNO10!$F$167');
sheet.getRange('LISTAFINAL!F15').setValue('=ALUNO11!$F$167');
});
}
}
说明:
- 您可以迭代每个电子表格文件的所有工作表。您的目标是只获得一张表格,并将公式放在特定的单元格中。因此,您可以摆脱
循环forEach
- 使用数组而不是迭代地使用多个google apps脚本函数是一个很好的选择
- 例如,在代码中,您使用
和getRange
11次。如果将公式值存储在数组中,则只需使用单个setValue
和getRange
即可存储公式值setValues
- 您可以迭代每个电子表格文件的所有工作表。您的目标是只获得一张表格,并将公式放在特定的单元格中。因此,您可以摆脱
循环forEach
- 使用数组而不是迭代地使用多个google apps脚本函数是一个很好的选择
- 例如,在代码中,您使用
和getRange
11次。如果将公式值存储在数组中,则只需使用单个setValue
和getRange
即可存储公式值setValues
我最初的想法是一个数组系统,我尝试了一些解决方案,但我不知道如何为这个脚本编写它。有些公式不起作用,但您的公式又很快地完成了这项工作。现在,一个包含12个电子表格的文件夹仅在13秒钟内处理完毕。再次非常感谢。我最初的想法是一个数组系统,我尝试了一些解决方案,但我不知道如何为这个脚本编写它。有些公式不起作用,但您的公式又很快地完成了这项工作。现在,一个包含12个电子表格的文件夹仅在13秒钟内处理完毕。再次非常感谢。
function validacao(){
const folder = DriveApp.getFolderById("FOLDER ID");
const x = folder.getFilesByType(MimeType.GOOGLE_SHEETS);
const formulas = Array(11).fill().map((_, i) => [`=ALUNO${i+1}!$F$167`]);
while (x.hasNext()) {
let ss_target = SpreadsheetApp.open(x.next());
let sh = ss_target.getSheetByName("LISTAFINAL");
sh.getRange('F5:F15').setValues(formulas);
}
}