如何使用 google 应用脚本获取链接到 sheet 的表单?
How to get a form linked to a sheet using google app script?
在 class Spreadsheet 中有 getFormUrl()
其中 returns url 用于附在价差上的表格 sheet,如果为 null没有表格。
但是现在您可以为每个 sheet 附加一个表格,您如何获得附加到给定 sheet 的表格的 ID 或 Url?
我给你举个我的脚本的例子。
或许能帮到你。
示例:
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Sheet1");
var data = ss.getDataRange().getValues(); // Data for pre-fill
var formUrl = ss.getFormUrl(); // Use form attached to sheet
var form = FormApp.openByUrl(formUrl);
var items = form.getItems();
我刚刚使用 getFormUrl 提供的 URL 并将字母 49 到 93 分配给一个字符串。那应该提供表单 ID。
var ss=SpreadsheetApp.getActiveSpreadsheet();
var fOrmUrl=ss.getFormUrl();
var sTring="";
for (var i=49; i<93; i++)
{
sTring=sTring + fOrmUrl[i];
}
我注意到 sheet.getFormURL() 方法并不总是 return 与 form.getPublishedUrl() return 相同的 URL。不过,两个 URL 都是有效的。为了解决这个问题,我打开 sheet 的 formUrl,然后检查并比较该表单的 ID:
var form = FormApp.getActiveForm();
var formId = form.getId();
const matches = spreadSheet.getSheets().filter(function (sheet) {
var sheetFormUrl = sheet.getFormUrl();
if (sheetFormUrl){
return FormApp.openByUrl(sheetFormUrl).getId() === formId;
}
});
const sheet = matches[0]
您可以在 Spreadsheet 和 Spreadsheet 的每个 Sheet 上调用 getSheetUrl:
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheets = ss.getSheets();
for (let sheet of sheets) {
let sheetName = sheet.getName();
let formUrl = sheet.getFormUrl();
Logger.log("formUrl1 %s %s", sheetName, formUrl);
if (formUrl) {
Logger.log("formid1 %s", FormApp.openByUrl(formUrl).getId());
}
}
let formUrl = ss.getFormUrl();
Logger.log("formUrl2 %s", formUrl);
if (formUrl) {
Logger.log("formid2 %s", FormApp.openByUrl(formUrl).getId());
}
在我的例子中,传播sheet是由一个表格创建的(在答案部分,绿色传播sheet图标),表格Url2指的是这个表格.其中一个 sheet 的表格 Url1 也与此表格有关,因为此 sheet 包含表格的答案。另一个 sheet 具有第二个表格的 url,因为我将第二个表格连接到相同的点差 sheet。第三个 sheet 的表单为 null Url,因为它与表单无关。
在 class Spreadsheet 中有 getFormUrl()
其中 returns url 用于附在价差上的表格 sheet,如果为 null没有表格。
但是现在您可以为每个 sheet 附加一个表格,您如何获得附加到给定 sheet 的表格的 ID 或 Url?
我给你举个我的脚本的例子。 或许能帮到你。
示例:
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Sheet1");
var data = ss.getDataRange().getValues(); // Data for pre-fill
var formUrl = ss.getFormUrl(); // Use form attached to sheet
var form = FormApp.openByUrl(formUrl);
var items = form.getItems();
我刚刚使用 getFormUrl 提供的 URL 并将字母 49 到 93 分配给一个字符串。那应该提供表单 ID。
var ss=SpreadsheetApp.getActiveSpreadsheet();
var fOrmUrl=ss.getFormUrl();
var sTring="";
for (var i=49; i<93; i++)
{
sTring=sTring + fOrmUrl[i];
}
我注意到 sheet.getFormURL() 方法并不总是 return 与 form.getPublishedUrl() return 相同的 URL。不过,两个 URL 都是有效的。为了解决这个问题,我打开 sheet 的 formUrl,然后检查并比较该表单的 ID:
var form = FormApp.getActiveForm();
var formId = form.getId();
const matches = spreadSheet.getSheets().filter(function (sheet) {
var sheetFormUrl = sheet.getFormUrl();
if (sheetFormUrl){
return FormApp.openByUrl(sheetFormUrl).getId() === formId;
}
});
const sheet = matches[0]
您可以在 Spreadsheet 和 Spreadsheet 的每个 Sheet 上调用 getSheetUrl:
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheets = ss.getSheets();
for (let sheet of sheets) {
let sheetName = sheet.getName();
let formUrl = sheet.getFormUrl();
Logger.log("formUrl1 %s %s", sheetName, formUrl);
if (formUrl) {
Logger.log("formid1 %s", FormApp.openByUrl(formUrl).getId());
}
}
let formUrl = ss.getFormUrl();
Logger.log("formUrl2 %s", formUrl);
if (formUrl) {
Logger.log("formid2 %s", FormApp.openByUrl(formUrl).getId());
}
在我的例子中,传播sheet是由一个表格创建的(在答案部分,绿色传播sheet图标),表格Url2指的是这个表格.其中一个 sheet 的表格 Url1 也与此表格有关,因为此 sheet 包含表格的答案。另一个 sheet 具有第二个表格的 url,因为我将第二个表格连接到相同的点差 sheet。第三个 sheet 的表单为 null Url,因为它与表单无关。