【发布时间】:2019-09-27 17:32:26
【问题描述】:
我有一个表单模板,我将根据需要对其进行复制、修改和发送以供回复。我为链接响应电子表格编写了一个脚本,它以特定方式重新排列响应数据。脚本本身运行良好,只需要在我的帐户上运行。
问题是脚本绑定到电子表格,而不是表单;但复制的是表格而不是电子表格。我尝试将我的脚本链接到表单模板并使用下面的代码创建链接的电子表格并将脚本复制过来。我设置了一个触发器来在表单提交时运行此功能,但是当表单模板被复制时触发器消失了。这段代码很大程度上是从这个答案中复制而来的:https://stackoverflow.com/a/48353155/12131953,并在开头添加了几行以创建链接的电子表格。
function copyScript() {
//create destination spreadsheet
var form = FormApp.getActiveForm();
var ss = SpreadsheetApp.create(form.getTitle() + " (Responses)");
form.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
var srcProjectId = "###my project id###"; // Source project ID
var dstGoogleDocsId = ss.getId(); // 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());
}
然后我尝试在打开重复表单时以编程方式创建触发器,但据我所知,创建可安装触发器超出了简单触发器 onOpen 的授权。
function onOpen(); {
ScriptApp.newTrigger("copyScript").forForm(FormApp.getActiveForm()).onFormSubmit().create();
.
.
.
}
我不是开发人员,我是自学这些东西的;我对脚本方面非常熟悉,但对 API 和 Web 部署完全不熟悉。
所以我的问题是:有没有办法将脚本从表单复制到新的、与表单链接的电子表格?我也可以通过某种方式应用我的脚本的解决方案(也许作为独立的)到所有新的电子表格,因为代码创建了一个菜单选项;因此,将脚本作为插件可能是这里的答案,但对于只有一个人会运行的脚本来说,这似乎有点过头了。
【问题讨论】:
-
欢迎。查看“表单服务”文档中的Enum DestinationType。它包括一个创建新电子表格然后将表单目标设置为该电子表格的示例。
标签: google-apps-script google-sheets google-forms