在多个电子表格中共享相同的 google 表单

Sharing same google form across multiple spreadsheets

我创建了一个反馈表,并希望在多个电子表格中打开并共享它。下面postSingle Google Form for multiple Sheets.

我使用了修改版的代码

表单按 IFRAME 的预期方式打开,但不允许我(或任何用户)填充字段并创建响应。我错过了什么?

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('Data Architecture')
      .addItem('Create File Note', 'menuItem1')
      .addSeparator()
      .addSubMenu(ui.createMenu('Feedback & Actions')
          .addItem('Provide  Feedback', 'provideFeedback')
          .addItem('Create and Action', 'createAction'))        
      .addToUi();
}

function provideFeedback() {
  
  var documentName = SpreadsheetApp.getActive().getName();
  
  var dataentityName = SpreadsheetApp.getActiveRange().getCell(1, 1).getDisplayValue();
  
  launchForm();
  
  
}

function createAction() {
  
  var documentName = SpreadsheetApp.getActive().getName()
  
  var documentID = SpreadsheetApp.getActive().getId()
  
  var dataentityName = SpreadsheetApp.getActiveRange().getCell(1, 1).getDisplayValue()
  
  launchForm();
  
}

function launchForm(){

  var formID='1pmH3AWiMUczat5uIaZ5zaT--cmDjq9v3W9pePPjwGF0';
  var form = FormApp.openById(formID);
  var formURL = form.getPublishedUrl();
   
  var response = UrlFetchApp.fetch(formURL);
  var formHtml = response.getContentText();
  
  var htmlApp = HtmlService
  .createHtmlOutput(formHtml)
  .setSandboxMode(HtmlService.SandboxMode.IFRAME)
  .setTitle('Feedback and action form')
  .setWidth(800)
  .setHeight(800);
  
  SpreadsheetApp.getActiveSpreadsheet().show(htmlApp);
}

无需访问网页并生成 HTML 内容并再次提供,您可以使用 iframe 标记和 URL 的 src 为您完成。

function launchForm(){

  var formID='1pmH3AWiMUczat5uIaZ5zaT--cmDjq9v3W9pePPjwGF0';
  var form = FormApp.openById(formID);
  var formURL = form.getPublishedUrl()+ "?embedded=true" 

  var htmlApp = HtmlService
  .createHtmlOutput('<iframe src="'+formURL+'" width="500" height="400" frameborder="0" marginheight="0" marginwidth="0"> </iframe>')
  .setTitle('Feedback and action form')
  .setWidth(400)
  .setHeight(400);

  SpreadsheetApp.getActiveSpreadsheet().show(htmlApp);
}

要在脚本中使用预填表格:
1) 按照 here
的步骤获取预填表格 2) 对于这样的形式:

预填充的 url 将如下所示:

var formURL = "https://docs.google.com/forms/d/e/{Publish ID}/viewform?
usp=pp_url&
entry.1739076204=Jack+Brown&
entry.1869878870=2017-05-12&
entry.799903038=Incorrect&
entry.1996064114=I+am+the+best&
entry.607023772=Select+Me"

我将各个选项分开,以便更容易与表单中的条目进行比较。现在要修改条目,您所要做的就是修改每个条目的“=”符号后的值。所以要更改名称,您可以这样做:

var name = "Chuck Norris"
entry.1739076204='+name+'

同样,可以通过修改URL来修改每一个enter。下面的代码修改了我托管的特定表单的条目。如果您需要,您将不得不修改

 function launchForm(){

  var publishedURl = "https://docs.google.com/forms/d/e/1FAIpQLSdsHM53jTWJ0Eqn8VSxE5bWHjnD9KXsVBrqLsBwtyJIIsjpnA/viewform"
  var name = "Chuck Not Norris"
  var dt = Utilities.formatDate(new Date(), "GMT-05:00", "yyyy-MM-dd")
  var options1 = ["Correct","Incorrect"]
  var options2 = "Chuck Norris is google Apps Scripts"
  var options3 = ["Select Me","Don't select me"]
  var preEditUrl = publishedURl + '?usp=pp_url&entry.1739076204='+name
                   +'&entry.1869878870='+dt
                   +'&entry.799903038='+options1[0]
                   +'&entry.1996064114='+options2
                   +'&entry.607023772='+options3[0]

  var htmlApp = HtmlService
  .createHtmlOutput('<iframe src="'+preEditUrl+'" width="500" height="400" frameborder="0" marginheight="0" marginwidth="0"> </iframe>')
  .setTitle('Feedback and action form')
  .setWidth(400)
  .setHeight(400);

  SpreadsheetApp.getActiveSpreadsheet().show(htmlApp);
}

希望这能让您朝着正确的方向开始。