【问题标题】:Sheet Set value the make copy of spreadsheet表设置值制作电子表格的副本
【发布时间】:2020-10-26 14:19:53
【问题描述】:
我正在尝试从一个模型生成多个电子表格,
function copySpreadSheet() {
var filesName = ['file1', 'file2', '...']
filesName.forEach(function copySpreadSheet(fileName) {
var spreadsheet = SpreadsheetApp.openById('model_ID');
var sheet = spreadsheet.getSheetByName('REF');
sheet.getRange('A2').setValue(fileName);
var destFolder = DriveApp.getFolderById("Folder_ID")
DriveApp.getFileById(spreadsheet.getId()).makeCopy(fileName, destFolder);
});
}
问题是我在“A2”范围内的工作表中所做的更改未应用于副本。
有什么建议吗?
谢谢
【问题讨论】:
标签:
javascript
google-apps-script
google-sheets
google-sheets-api
【解决方案1】:
forEach() 循环内的代码是异步执行的
这意味着您的工作表可能会在设置新值之前被全部复制。
您可以通过实现强制代码等待的SpreadsheetApp.flush()) 和Utilities.sleep() 请求来避免这种情况。
示例:
function copySpreadSheet() {
var filesName = ['file1', 'file2', '...']
filesName.forEach(function copySpreadSheet(fileName) {
Logger.log(fileName);
var spreadsheet = SpreadsheetApp.openById('model_ID');
var sheet = spreadsheet.getSheetByName('REF');
SpreadsheetApp.flush();
sheet.getRange('A2').setValue(fileName);
SpreadsheetApp.flush();
var destFolder = DriveApp.getFolderById("Folder_ID")
Utilities.sleep(1000);
DriveApp.getFileById(spreadsheet.getId()).makeCopy(fileName, destFolder);
});
}