应用程序脚本插入多张纸时出现问题

问题描述 投票:0回答:1

由于以下行,我收到消息错误“异常:服务错误:电子表格”:

var sheetCreated = SpreadsheetApp.getActiveSpreadsheet().insertSheet(newSheetName);

我的文件包含 3 张具有唯一名称的表格,您能帮我理解吗?

我运行这个函数:

  function load(){
    var sheetToCopyName = 'toto'
    var spreadSheetToCopyId = '1zDqTaBmoedJPMyopchy2MqVG0JuDveVYUlFQ3_wLO_Y';
    var destinationSharedDriveFolderId = '14ZJ2pK2lWYhXXa0u7PQEmgmuXx1xC0Vr'
    
    var sourceSpreadSheet = SpreadsheetApp.openById(spreadSheetToCopyId);

    severalSheetsToXlsx(sourceSpreadSheet, destinationSharedDriveFolderId);
  }

  function severalSheetsToXlsx(sourceSpreadSheet, destinationSharedDriveFolderId)
  {
      // create the new file that will host the sheet to copy to excel
      var destinationSpreadSheet = SpreadsheetApp.create('destinationSpreadSheetForCopy',50,5)
      var destinationSpreadSheetId = destinationSpreadSheet.getId()

      // create new sheets to copy with hard values
      var sourceSheets = sourceSpreadSheet.getSheets();
      for (let i = 0; i < sourceSheets.length; i++){
        var sheetToCopy = createSheetCopied(sourceSheets[i])
        var sheetCopied =  sheetToCopy.copyTo(destinationSpreadSheet)
        sourceSpreadSheet.deleteSheet(sheetToCopy);
      }
    
      // export to excel
      exportExcelFile(destinationSharedDriveFolderId, destinationSpreadSheetId)
  }

  function createSheetCopied(sheetToCopy){
      // identify the area to copy
      var rangeToCopy = sheetToCopy.getDataRange()
      var valuesToCopy = rangeToCopy.getValues()

      //create new sheet with values
      var newSheetName = sheetToCopy.getName().concat('_new')
      var sheetCreated = SpreadsheetApp.getActiveSpreadsheet().insertSheet(newSheetName);
      var pastedRange = sheetCreated.getRange(1, 1, valuesToCopy.length, valuesToCopy[0].length);
      pastedRange.setValues(valuesToCopy);
      return sheetCreated
  }

  function exportExcelFile(destinationSharedDriveFolderId, spreadSheetId){
      var requestData = {"method": "GET", "headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}};
      params= spreadSheetId+"/export?format=xlsx"
      var url = "https://docs.google.com/spreadsheets/d/"+ params
      console.log(url)
      var result = UrlFetchApp.fetch(url, requestData);  
      var excelBlob = result.getBlob();
      console.log('EXCEL :')
      var folder = DriveApp.getFolderById(destinationSharedDriveFolderId);
      var resource = {
        title: "NewFileCreated" + ".xlsx",
        mimeType: "MimeType.MICROSOFT_EXCEL",
        parents: [{ id: folder.getId() }]
          } 
      excelBlob.setName('NewFileCreated' + ".xlsx")
      var file = folder.createFile(excelBlob);
      console.log("Fichier créé: " + file.getUrl()); 
  }
google-sheets google-apps-script
1个回答
0
投票

修改并仅使用函数exportExcelFile()代替

我从您的示例脚本中注意到,您只想按原样创建一个新文档,但将所有工作表名称更改为

<originalsheetname>_new
除外。如果我正确理解你的脚本,你可能只需要使用以下内容(而不使用其他功能):

function exportExcelFile() {
  //Edit starts here
  const destinationSharedDriveFolderId = "<Drive Folder ID>";
  const spreadSheetId = "<File ID>";
  //line to rename sheet name
  SpreadsheetApp.openById(spreadSheetId).getSheets().map(x => x.setName(x.getName() + "_new"));
  ///////////////////////////

  var requestData = { "method": "GET", "headers": { "Authorization": "Bearer " + ScriptApp.getOAuthToken() } };
  params = spreadSheetId + "/export?format=xlsx"
  var url = "https://docs.google.com/spreadsheets/d/" + params
  console.log(url)
  var result = UrlFetchApp.fetch(url, requestData);
  var excelBlob = result.getBlob();
  console.log('EXCEL :')
  var folder = DriveApp.getFolderById(destinationSharedDriveFolderId);
  var resource = {
    title: "NewFileCreated" + ".xlsx",
    mimeType: "MimeType.MICROSOFT_EXCEL",
    parents: [{ id: folder.getId() }]
  }
  excelBlob.setName('NewFileCreated' + ".xlsx")
  var file = folder.createFile(excelBlob);
  console.log("Fichier créé: " + file.getUrl());
}

输入:

input

输出:

  • 驱动器文件夹:

drive output

  • 新文件:

new file

© www.soinside.com 2019 - 2024. All rights reserved.