我正在使用Google App Script。我想:
在我看来,下面的代码应该可行,但事实并非如此。它完成完成任务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);
}
答案 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);
}