Google apps script 如何(从谷歌电子表格)获取链接表单的ID

Google apps script 如何(从谷歌电子表格)获取链接表单的ID,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我有一个表格链接到的谷歌电子表格,所有表格回复都存储在其中。我试图找到的是表单本身的ID。我试过了,但没用 (我正在表单链接到的电子表格中的脚本编辑器中运行以下代码。) 它返回NULL,因为脚本是绑定到电子表格本身的容器。是否有其他方法获取链接表单的ID,甚至链接表单的URL 我可以通过从电子表格中执行以下操作手动获取它。 表格>编辑表格 这将显示URL 如果我知道表单的名称,我可以使用DriveApp.getFilesByName()按名称获取它,遍历它,然后使用File.getId(),但我

我有一个表格链接到的谷歌电子表格,所有表格回复都存储在其中。我试图找到的是表单本身的ID。我试过了,但没用

(我正在表单链接到的电子表格中的脚本编辑器中运行以下代码。)

它返回NULL,因为脚本是绑定到电子表格本身的容器。是否有其他方法获取链接表单的ID,甚至链接表单的URL

我可以通过从电子表格中执行以下操作手动获取它。 表格>编辑表格 这将显示URL

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

有什么想法吗?

它将是这样一个脚本,可以从电子表格中运行:

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.

因此,在他们添加支持之前,它只能在旧版本中工作。

对于其他偶然发现这一点的人:新的电子表格允许这样做。我已经试过了,它对我有效。以下是我获取ID的方式:

 var formUrl = SpreadsheetApp.getActiveSpreadsheet().getFormUrl();
 var formID = formUrl.match(/[-\w]{25,}/);
我从这个问题中得到了正则表达式:


希望这有帮助。

如果您只需要附加表单的表单ID,并且不需要出于任何原因保留表单URL,那么这一行就足够了:

    var formID = SpreadsheetApp.getActiveSpreadsheet().getFormUrl().match(/\/d\/(.{25,})\//)[1];

要避免解析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() );
}

可能需要先手动运行函数以授予permissionsTrue,这将为您获取表单URL,但OP询问如何获取表单ID,这需要额外的步骤从URL提取ID部分。
function getLinkedForm(){
  return FormApp.openByUrl( SpreadsheetApp.getActiveSpreadsheet().getFormUrl() );
}