我已经看到很多关于如何使用脚本将工作表复制到Google Spreadsheets中的另一个电子表格的答案,例如this copyTo method。
但是现在我有一个包含许多选项卡的大型电子表格,我在绑定脚本中创建了一个新版本的更新。此新表中的数据是测试数据。所以这就是我所拥有的:
然后我需要将新脚本项目复制到旧电子表格(具有一致的数据)。
我知道我可以努力复制每张纸,但这不是问题(除了在命名范围内造成很多麻烦)。问题是如何将脚本项目复制到另一个spreasheet。
答案 0 :(得分:1)
只需转到脚本编辑器旧电子表格并删除脚本(或将其注释掉)即可。然后打开新电子表格的脚本编辑器并复制脚本。将脚本粘贴到旧电子表格脚本编辑器中。保存它,你应该很高兴。
答案 1 :(得分:1)
似乎没有直接的方式来复制"复制"从电子表格到另一个但的脚本您可以使用Installable Triggers
从第一个(或实际上从任何地方)的脚本中为第二个电子表格分配您想要的任何触发器e.g。你在第一张表中有一个onEdit(e)触发器来执行某些操作, 您可以使用Script App之类的
轻松将其应用于第二个电子表格var ss = SpreadsheetApp.openById(secod_spreadsheet_id); //or whatever way you like
ScriptApp.newTrigger('onEdit') //or whatever its name is ...
.forSpreadsheet(ss)
.onEdit() //or onCreate() or onChange()
.create();
这会将触发器添加到您的第二张表格中,但您必须阅读restrictions和Limitaions的可安装触发器,因为它们将始终在您的帐户上运行(见链接中的解释)
最后一句话,
如果您之前知道要使用多张工作表,则可能需要制作一个包含所有触发器的Standalone脚本,并为工作表分配可安装的触发器
另请注意,这些触发器不能仅使用循环或类似的东西从每张纸上删除和重新分配
您可能还想查看This问题
答案 2 :(得分:1)
您是否正在寻找此问题的解决方案?如果你还在做,这个答案怎么样?最近,添加了Google Apps Script API。通过这种方式,用户可以轻松管理GAS项目文件。此示例脚本使用此API。
要使用此示例,请执行以下安装流程。
https://www.googleapis.com/auth/script.projects
和https://www.googleapis.com/auth/script.external_request
的范围添加到脚本编辑器的清单文件(appsscript.json)中。
"oauthScopes": ["https://www.googleapis.com/auth/script.projects", "https://www.googleapis.com/auth/script.external_request", "### other scopes ###"]
添加到appsscript.json,然后保存。
通过这些流程,源电子表格的项目(绑定脚本)将被复制到目标电子表格。
在发布此示例之前,请输入源电子表格的项目ID和目标电子表格ID。
function main() {
var srcProjectId = "### project ID ###"; // Source project ID
var dstGoogleDocsId = "### file ID of Google Docs ###"; // Destination spreadsheet ID
var baseUrl = "https://script.googleapis.com/v1/projects";
var accessToken = ScriptApp.getOAuthToken();
// Retrieve filename of bound-script project.
var srcName = JSON.parse(UrlFetchApp.fetch(baseUrl + "/" + srcProjectId, {
method: "get",
headers: {"Authorization": "Bearer " + accessToken}
}).getContentText()).title;
// Retrieve bound-script project.
var obj = UrlFetchApp.fetch(baseUrl + "/" + srcProjectId + "/content", {
method: "get",
headers: {"Authorization": "Bearer " + accessToken}
}).getContentText();
// Create new bound script and retrieve project ID.
var dstId = JSON.parse(UrlFetchApp.fetch(baseUrl, {
method: "post",
contentType: 'application/json',
headers: {"Authorization": "Bearer " + accessToken},
payload: JSON.stringify({"title": srcName, "parentId": dstGoogleDocsId})
}).getContentText()).scriptId;
// Upload a project to bound-script project.
var res = JSON.parse(UrlFetchApp.fetch(baseUrl + "/" + dstId + "/content", {
method: "put",
contentType: 'application/json',
headers: {"Authorization": "Bearer " + accessToken},
payload: obj
}).getContentText());
}
如果我误解了你的问题,我很抱歉。
答案 3 :(得分:1)
我认为Google Clasp工具可以帮助您实现自动化。我开始使用它,并且很有希望。例如,您可以在不同的文件夹上同时发布旧项目和新项目的clasp clone [scriptId]
。然后,您可以将所有新脚本文件复制到旧文件夹,然后发出clasp push
。但是,由于我不是专家,我建议您在概念验证中进行测试:)