【问题标题】: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);
        
      }); 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      相关资源
      最近更新 更多