【发布时间】:2013-05-21 10:17:24
【问题描述】:
我正在尝试使用谷歌应用脚本复制/复制工作表。有可能这样做吗?我无法在 API 文档中找到此类调用的任何参考。 https://developers.google.com/google-apps/spreadsheets/
【问题讨论】:
标签: google-apps-script google-sheets google-drive-api
我正在尝试使用谷歌应用脚本复制/复制工作表。有可能这样做吗?我无法在 API 文档中找到此类调用的任何参考。 https://developers.google.com/google-apps/spreadsheets/
【问题讨论】:
标签: google-apps-script google-sheets google-drive-api
对不起,据我所知,没有功能可以做到这一点。 Google 应用程序脚本会执行此操作。
我是手动完成的。我创建了一个新工作表并复制了公式/数据。但是如果你在你的公式中使用 $ 会有错误,读取工作正常,但写入很痛苦,因为某些公式,例如带有 A$1 的引用不会写入工作表(由于错误)。所以你需要将它们切换到A1。你也不能复制字体/颜色等。
我的代码是用 Java 编写的,但不容易拆分出你需要的部分。
【讨论】:
您可以使用部署为网络应用程序的谷歌应用程序脚本。 使用 HTTP GET 调用 Web 应用程序以传输电子表格 ID、要复制的工作表的名称和新工作表的名称。这是我使用的脚本:
function doGet(e) {
// get parameter from request (GET HTTP method)
var spreadsheetID = e.parameter.spreadsheetID;
var targetName = e.parameter.targetName;
var sourceSheetName = e.parameter.sheetName;
var response = copyWorksheet(spreadsheetID, sourceSheetName, targetName);
return ContentService.createTextOutput(response);
}
function copyWorksheet(spreadsheetID, templateName, sheetName){
// if there is a spreadsheet ID, find the spreadsheet with this ID
if(typeof spreadsheetID == "string"){
spreadsheet = SpreadsheetApp.openById(spreadsheetID);
}else{
return "failure; the spreadsheet " + spreadsheetID + " was not found";
}
// if there is a template name, find the worksheet with this name and set it as the active sheet; (if there is no name provided, the active worksheet is duplicated)
if(typeof templateName == "string"){
template = spreadsheet.getSheetByName(templateName);
if(template != null)
spreadsheet.setActiveSheet(template);
}
// duplicate active sheet and set the new sheet as the active sheet
newSheet = spreadsheet.duplicateActiveSheet();
// rename the sheet
if(typeof sheetName == "string"){
sheetName.setName(sheetName);
}
return "success;" + sheetName + ";";
}
将此脚本附加到任何电子表格并进行部署。调用它使用:
<scriptURL>?spreadsheetID=<spreadsheetID>&targetName=<targetName>&templateName=<sourceSheetName>
【讨论】: