如何使用 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,因为它与表单无关。