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

Jef*_*eff 14 google-sheets google-apps-script google-drive-api

我正在使用Google App Script.我在尝试着:

  1. 制作电子表格的副本
  2. 为副本提供特定的文件名,和
  3. 将其保存到特定文件夹.

在我看来,下面的代码应该可行,但事实并非如此.它确实完成了任务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
Run Code Online (Sandbox Code Playgroud)

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

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);
}
Run Code Online (Sandbox Code Playgroud)

Trầ*_*iền 24

这段代码对我来说很有用。

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

  • 这个答案没有得到足够的关注......两行代码,它复制了电子表格中的所有工作簿。 (8认同)

poi*_*ick 13

以下是适合我的功能的更正代码.您没有设置我使用该方法的命名范围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); 
}
Run Code Online (Sandbox Code Playgroud)