【问题标题】:How do I make copy of spreadsheet and save it to particular folder?如何制作电子表格的副本并将其保存到特定文件夹?
【发布时间】:2015-06-26 17:19:31
【问题描述】:

我正在使用 Google 应用脚本。我正在尝试:

  1. 制作电子表格的副本
  2. 为副本指定一个特定的文件名,然后
  3. 将其保存到特定文件夹。

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

(注意:我知道这个问题之前已经回答过了,但我相信自从 Google 停止了 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);
}

【问题讨论】:

  • 这段代码是正确的并且可以工作......现在刚刚测试。
  • 正如 Serge 所说,对我也有用。 3 项任务全部完成!
  • 谢谢。你是对的,该代码有效。我在发布之前简化了我的代码。我的代码实际上是这样的: function saveAsSpreadsheet(){ var sheet = SpreadsheetApp.getActiveSpreadsheet(); var buildingNameAddress = sheet.getRangeByName('buildingNameAddress').getValue(); Logger.log(buildingNameAddress); //记录正确的字符串 var destFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxxxx"); DriveApp.getFileById(sheet.getId()).makeCopy(buildingNameAddress, destFolder); } @pointNclick @Serge insas
  • 为什么上面的代码不起作用?谢谢。
  • 鉴于您声明脚本日志显示预期的字符串值,它可能具有阻止其用作驱动器文件名的属性。

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


【解决方案1】:

这是对我有用的函数的更正代码。您没有设置我使用方法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); 
}

【讨论】:

    【解决方案2】:

    这段代码对我很有用。

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

    【讨论】:

    • 这个答案没有得到足够的重视......两行代码,它复制了电子表格中的所有工作簿。
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    相关资源
    最近更新 更多