如何制作电子表格副本并将其保存到特定文件夹?

时间:2015-06-26 17:19:32

标签: google-apps-script google-sheets google-drive-api

我正在使用Google App Script。我想:

  1. 制作电子表格的副本
  2. 为副本提供特定的文件名,
  3. 将其保存到特定文件夹。
  4. 在我看来,下面的代码应该可行,但事实并非如此。它完成完成任务1和3 - 也就是说,它会复制并将副本保存到我想要的文件夹中。但是,它不会使用我指定的文件名保存文件。相反,它将其保存为“[原始电子表格文件名]的副本”。为此,我使用的是File#makeCopy

    (注意:我知道这个问题之前已经得到了解答,但我相信自谷歌落后于DocList服务以来一直没有得到解答。)

    当我制作这个简化的MCVE时,我发现它按预期工作:

    function saveAsSpreadsheet() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet();
      var destFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxx");
      DriveApp.getFileById(sheet.getId()).makeCopy("desired file name", destFolder);
    } //END function saveAsSpreadsheet
    

    但是,我的原始代码没有 - 副本的名称错误:

    function saveAsSpreadsheet() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet();
      var buildingNameAddress = sheet.getRangeByName('buildingNameAddress').getValue();
      Logger.log(buildingNameAddress); //Logs correct string
      var destFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxxxx");
      DriveApp.getFileById(sheet.getId()).makeCopy(buildingNameAddress, destFolder);
    }
    

2 个答案:

答案 0 :(得分:9)

以下是适用于我的功能的更正代码。您没有设置我使用方法setNamedRange的命名范围并为其命名。然后将您获取范围值的变量名称更改为TestRange。此外,getValue()只会获得一个值,而您需要一系列值,因此使用getValues()。但其余代码很好并且工作得很好。

function saveAsSpreadsheet(){ 
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange('Sheet1!A1:B3');
  sheet.setNamedRange('buildingNameAddress', range);
  var TestRange = sheet.getRangeByName('buildingNameAddress').getValues(); 
  Logger.log(TestRange); 
  var destFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxxx"); 
  DriveApp.getFileById(sheet.getId()).makeCopy("Test File", destFolder); 
}

答案 1 :(得分:1)

这段代码对我很有用。

function cloneGoogleSheet() {
  var destFolder = DriveApp.getFolderById("your_drive_folder_id"); 
  DriveApp.getFileById("your_drive_source_file_id").makeCopy("particular_file_name", destFolder); 
}