Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 跨多个电子表格共享相同的google表单_Google Sheets_Google Spreadsheet Api_Google Forms - Fatal编程技术网

Google sheets 跨多个电子表格共享相同的google表单

Google sheets 跨多个电子表格共享相同的google表单,google-sheets,google-spreadsheet-api,google-forms,Google Sheets,Google Spreadsheet Api,Google Forms,我已经创建了一个反馈表,希望从多个电子表格中打开并共享它。我在下面的帖子中使用了代码的修订版 表单按预期作为IFRAME打开,但不允许我(或任何用户)填充字段并创建响应。我错过了什么 函数onOpen(){ var ui=SpreadsheetApp.getUi(); //或文档或格式。 ui.createMenu(“数据架构”) .addItem('创建文件注释','菜单项1') .addSeparator() .add子菜单(ui.createMenu('Feedback&Actions'

我已经创建了一个反馈表,希望从多个电子表格中打开并共享它。我在下面的帖子中使用了代码的修订版

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

函数onOpen(){ var ui=SpreadsheetApp.getUi(); //或文档或格式。 ui.createMenu(“数据架构”) .addItem('创建文件注释','菜单项1') .addSeparator() .add子菜单(ui.createMenu('Feedback&Actions')) .addItem('提供反馈','提供反馈') .addItem('Create and Action','createAction')) .addToUi(); } 函数provideFeedback(){ var documentName=SpreadsheetApp.getActive().getName(); var dataentityName=SpreadsheetApp.getActiveRange().getCell(1,1.getDisplayValue(); launchForm(); } 函数createAction(){ var documentName=SpreadsheetApp.getActive().getName() var documentID=SpreadsheetApp.getActive().getId() var dataentityName=SpreadsheetApp.getActiveRange().getCell(1,1).getDisplayValue() launchForm(); } 函数启动窗体(){ 变量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(“反馈和行动表”) .setWidth(800) .设置高度(800); SpreadsheetApp.getActiveSpreadsheet().show(htmlApp);
}您可以在URL中使用带有src的iframe标记,而不是访问网页并生成HTML内容并再次提供它

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);
}
我已将各个选项分开,以便更容易与表单中的条目进行比较。现在要修改条目,只需修改每个条目的“=”符号后的值。因此,要更改名称,请执行以下操作:

var name = "Chuck Norris"
entry.1739076204='+name+'
同样,您可以通过修改URL来修改每个输入。下面的代码修改我托管的特定表单的条目。您必须根据您的需要修改if

 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);
}
函数启动表单(){
var publishedURl=”https://docs.google.com/forms/d/e/1FAIpQLSdsHM53jTWJ0Eqn8VSxE5bWHjnD9KXsVBrqLsBwtyJIIsjpnA/viewform"
var name=“Chuck Not Norris”
var dt=Utilities.formatDate(新日期(),“GMT-05:00”,“yyyy-MM-dd”)
变量选项1=[“正确”、“不正确”]
var options2=“Chuck Norris是谷歌应用程序脚本”
变量选项3=[“选择我”、“不选择我”]
var preEditUrl=publishedURl+'?usp=pp_url&entry.1739076204='+name
+“&entry.1869878870=”+dt
+“&entry.799903038=”+选项1[0]
+“&entry.1996064114=”+选项2
+“&entry.607023772=”+选项3[0]
var htmlApp=HtmlService
.createHtmlOutput(“”)
.setTitle(“反馈和行动表”)
.setWidth(400)
.设置高度(400);
SpreadsheetApp.getActiveSpreadsheet().show(htmlApp);
}

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

分享你用来显示表单的部分代码会很有用。我已经将代码添加到原始帖子中。这很有用,非常感谢;非常感谢。剩下的唯一问题是,当表单在IFRAME中打开时,如何预填充某些字段,例如创建响应的用户的电子邮件地址,将日期字段默认为当前日期,以及调用方传递的3个参数。@MVega更新了答案,解释了如何预填充字段
 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);
}