在Google Spreadsheet的弹出窗口中创建Google表单,这可行吗?

3

参考资料:

一个谷歌表格用于多个工作表



要求:

  1. 我写作有些困难,需要让内容更易懂(英语不太好)。
  2. 我对Google Apps Script (GAS)有一定的了解。
  3. 我已经将下面的"MyURLDoc"和"MyIdDoc"改成了我的考虑。




问题:

如何将谷歌表单嵌入到我在谷歌电子表格中制作的弹出窗口中?





尝试 1:

function goToURL() {
  FormApp.openByUrl(//*** MyURLDoc! ***//);
}

尝试2: 以下是参考文献中写的内容!
function goToForm() {
var form = FormApp.openById(//*** MyIdDoc! ***//),
    formUrl = form.getPublishedUrl(),
    response = UrlFetchApp.fetch(formUrl),
    formHtml = response.getContentText(),
    htmlApp = HtmlService
  .createHtmlOutput(formHtml)
  .setSandboxMode(HtmlService.SandboxMode.IFRAME)
  .setTitle('Ta Daaa!')
  .setWidth(500) 
  .setHeight(450);  SpreadsheetApp.getActiveSpreadsheet().show(htmlApp);
}





问题 :

它总是说这样的话: " 找不到给定ID的项目或您无权访问 "。


可能是重复问题,请查看此链接 https://dev59.com/S3PYa4cB1Zd3GeqPiWmL - mTorres
当然是。@mTorres!因为我之前在(参考)中提供的链接,你在评论中附上了一个确实非常相似的问题,但它并不是同一个问题。因为在我的情况下,我发现了新的问题,同时我无法在那里回复我的评论。这都是因为我的声望还很低,所以我需要在这里重新发布我的新帖子,以便在发现新问题时重新认领。 - Deby Ferdian
抱歉,我读得太快了,你是在编辑表单时还是在查看表单时获取了ID?这可能是一个小错误,但我们都是人类,都会犯错。此外,查看表单没有权限问题,但编辑表单有。 - mTorres
嗯,我不知道。但是我已经用视图ID更改了我的ID,但是结果仍然相同,没有任何变化,警告总是出现,就像那样。 - Deby Ferdian
我非常确定您输入了错误的表单ID。 - Ritesh Nair
发布:如果我进行了更改并使用脚本“openById”,则警告将变成这样:“_抱歉,出现服务器错误,请稍等片刻后重试。_” - Deby Ferdian
1个回答

5

使用Google表单创建侧边栏

我刚刚找到了一个旧表单并获取了嵌入代码。我将其加载到另一个项目上的侧边栏中,并粘贴了iframe嵌入代码,它完美地加载了,只是大小有点问题。我运行了表单,确实将数据加载到包含它的电子表格中。

我想我会添加一个完整的示例。这是一个简单的示例,用于将时间戳文本输入到电子表格中。它有两种方法。第一种技术使用标准的html、javascript、JQuery和Google脚本。第二种技术只需创建一个表单并将其嵌入到一个简单的html页面中即可完成。这两个版本都适合放在侧边栏中,并且都链接到电子表格页面,其中文本被加载并打上时间戳。

Code.gs:

function onOpen()
{
  SpreadsheetApp.getUi().createMenu('My Tools')
    .addItem('createTextEntryForm', 'createTextEntryForm')
    .addToUi();

  loadSideBar();
  SpreadsheetApp.getUi().createMenu('My Menu').addItem('loadSidebar', 'loadSideBar').addToUi();  
}

//This loads the text into the spreadsheet for the html version of the form.
function dispText(txt)
{
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sht=ss.getSheetByName('Notes');
  var ts=Utilities.formatDate(new Date(), 'GMT-6', "M/dd/yyyy HH:mm:ss");
  var row=[];
  row.push(ts);
  row.push(txt);
  sht.appendRow(row);
  return true;
}

function loadSideBar()
{
  var userInterface=HtmlService.createHtmlOutputFromFile('formBar');//sidebar for html and formBar for form
  SpreadsheetApp.getUi().showSidebar(userInterface);
}


//This is the form
function createTextEntryForm()
{
   var ss=SpreadsheetApp.getActiveSpreadsheet();
   var form=FormApp.create('Form On A Sidebar');
   form.setDescription('Enter Your Message and Push Submit when complete.')
       .setConfirmationMessage('Message Saved and TimeStamped.')
       .setAllowResponseEdits(true)
       .setAcceptingResponses(false)
       .setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
   var containerLink=form.addParagraphTextItem();
   containerLink.setTitle('Enter your comment now.')
       .isRequired();
}

sidebar.html是表单的HTML版本:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <script>
    $(function() {
        $('#txt1').val('');
      });
    function sendText()
    {
      var txt=$('#txt1').val();
      google.script.run
        .withSuccessHandler(clearText)
        .dispText(txt);
    }
    function clearText()
    {
      $('#txt1').val('');
    }
    console.log("My code");
  </script>
  </head>
  <body>
  <textarea id="txt1" rows="12" cols="35"></textarea>
<br />
  <input id="btn1" type="button" value="submit" onClick="sendText();" />
  </body>
</html>

formBar.html是表单嵌入的位置:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <iframe src="FormURL?embedded=true#start=embed" width="300" height="550" frameborder="0" marginheight="0" marginwidth="0">Loading...</iframe>
  </body>
</html>

这是电子表格和侧边栏的外观:

enter image description here

enter image description here


是的,终于从你这里得到了启示@Cooper。谢谢!是啊,你说得对,我一开始并没有期望过这个,之前也从未尝试过,但是在我尝试之后,TTAAADDAAA!!! 它起作用了,我不知道为什么,但它真的很棒……^_^ - Deby Ferdian
@DebyFerdian 我添加了一个完整的示例。这个简单的表单是在Google Apps Script中创建的。 - Cooper
嗨,@Cooper?我有一个小问题,这在另一个帖子中已经提供了。我们如何在同一窗口上显示或加载多个弹出窗口,但请注意:不要与其他应用程序的组合(如“侧边栏”)混淆。 - Deby Ferdian

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