如何从Google电子表格中获取链接表单的ID

5
我有一个与表单链接并存储所有表单响应的谷歌电子表格。我想要找到表单本身的ID。我尝试了以下代码,但没有成功。
(我正在从与表单链接的电子表格的脚本编辑器中运行以下代码。)
function getID()
{
 var form = FormApp.getActiveForm();
 var formID = form.getId();
 Logger.log(formID);
}

由于脚本是容器绑定到电子表格本身,因此返回 NULL。是否有其他方法可以获取链接表单的ID甚至链接表单的URL呢?

我可以通过以下步骤从电子表格中手动获取它。

表单 > 编辑表单,这将显示 URL。

如果我知道表单的名称,我可以通过DriveApp.getFilesByName() 按名称获取它,然后遍历它并使用File.getId() 但我不一定知道名称。

有什么想法吗?


可能需要手动运行函数以授予权限。 - AshClarke
5个回答

9
为了避免解析URL,最安全的方法是:
不要解析URL。
Logger.log( (FormApp.openByUrl(SpreadsheetApp.getActiveSpreadsheet().getFormUrl())).getId() );

或者长版本:

function logFormId_LongHand(){
  var formURL = SpreadsheetApp.getActiveSpreadsheet().getFormUrl();
  var form = FormApp.openByUrl(formURL);
  var formId = form.getId();
  Logger.log( formId );
}

为了在电子表格应用程序脚本中获取表单对象,我使用以下函数:

function getLinkedForm(){
  return FormApp.openByUrl( SpreadsheetApp.getActiveSpreadsheet().getFormUrl() );
}

2

对于其他遇到类似问题的人:新版电子表格已经支持此功能。我已经尝试过并且可以正常工作。以下是获取ID的步骤:

 var formUrl = SpreadsheetApp.getActiveSpreadsheet().getFormUrl();
 var formID = formUrl.match(/[-\w]{25,}/);

我从这个问题中获取了正则表达式:在Google Apps Script上从URL获取文件ID的最简单方法 希望这有所帮助。

1
如果您只需要附加表单的表单ID,而不需要出于任何原因保留表单URL,则这个一行代码就足够了:
    var formID = SpreadsheetApp.getActiveSpreadsheet().getFormUrl().match(/\/d\/(.{25,})\//)[1];

0

是的。

这将会是一个脚本,可以从电子表格内部运行,就像这样:

function getFormUrl()
{

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var formUrl = ss.getFormUrl();
 Logger.log(formUrl);

}

然而,如果您尝试在新的电子表格中运行此代码,则会收到以下错误消息:

The api method 'getFormUrl' is not available yet in the new version of Google Sheets.

所以,在他们添加支持之前,它只能在旧版本中使用。


没错,这会让你得到表单的URL,但是OP问的是如何获取表单ID,这需要额外的步骤从URL中提取ID部分。 - Kenigmatic

-2
您还可以在“帮助”菜单中查找/连接原始表单。输入“表单”,然后单击“编辑表单”。它会定位到原始表单。当通过表单名称在驱动程序中搜索失败时,这非常有用。因此,如果您需要对原始可编辑表单进行任何操作,但无法找到它,并且具有链接的 Sheets 文档,则现在可以回溯并从那里开始。 :)

这是OP在问题中描述的内容:“我可以通过从电子表格中执行以下操作手动获取它。表单>编辑表单,这将向我显示URL。”如果是这样,这可能并不能回答问题。如果不是,您需要更明显地说明这是如何回答问题的。请进行编辑。 - Yunnosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接