生成超链接以预先填充Google表单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成超链接以预先填充Google表单相关的知识,希望对你有一定的参考价值。

上下文:我使用Google表单的顺序阶段创建了Google表格/表单工作流程。

  1. 表格1(面向公众)接受公共用户提交的一些数据并保存到工作表1。
  2. 然后内部人员通过电话联系提交者并进行更深入的采访。
  3. 表格2(面向内部)由面试官用来记录电话采访的答案。

此问题与表单2的生成有关,因为我用表单1(表单1提交的内容)中的信息部分地预先填充了该表单。 "&entry.NNNNNN=whatever"。我在工作表1的最后一列中复制了此公式。单击该单元格,然后生成的超链接按预期成功地使用工作表1的相应行中的数据预填充了表单2。

问题:一旦收到新的Form 1提交,就会在工作表1中插入新行,该行在最后一列中不包含所需的超链接公式。我希望这是自动的,所以面试官在每次要求填写表格2之前不负责抄写。

我已经采用了几种方法来实现这一点的自动化:

  1. 建议使用一个线程(而不是向下复制)在顶部单元格中创建一个数组公式,以便将其应用于包括新插入的行在内的整个列。我尝试了所有可以想到的方法,但无法使用公式用arrayformula()生成结果列。如果有解决此问题的方法,那将是一个令人满意的解决方案。

       =HYPERLINK(CONCATENATE("https://docs.google.com/forms/d/e/XXXXXXXXXXXXXXXX/viewform?usp=pp_url&entry.251357138=",C2,"&entry.966351469=",D2,"&entry.384696201=",E2,"&entry.1366694528=",F2,"&entry.463407115=",M2,"&entry.1557144679=",B2,if(P2,"&entry.1777888516=Email",""),if(O2,"&entry.1777888516=Phone",""),if(H2,"&entry.2110474669=Individual+(Adult)",""),if(I2,"&entry.2110474669=Individual+(Under+18,+Minor)",""),if(J2,"&entry.2110474669=Couple",""),if(K2,"&entry.2110474669=Family",""),if(L2,"&entry.2110474669=Group",""),if(R2,"&entry.1892971721=San+Jose",""),if(S2,"&entry.1892971721=Sunnyvale","")), "Complete Intake")
    
  2. 我试图创建一个ModalDialogue并在其中显示脚本生成的超链接。我使用了在此论坛中找到的这种方法。但这根本没有打开任何对话框,也没有引发任何错误(即使在删除超链接之后也是如此)。没有迹象表明弹出窗口被阻止。我脚本的其他部分使用Browser.msgBox不会出现任何弹出问题,但我认为这不会传递超链接。

     var htmlOutput = HtmlService
         .createHtmlOutput('Click to <a href="' + customFillURL + '">open and prefill</a> intake interview form.')
         .setWidth(250) //optional
         .setHeight(50); //optional
     SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Ready to fill intake interview form:');
    
  3. 使用onFormSubmit()并在插入新行之后编写脚本的复制脚本。但是我一直无法弄清楚如何识别在Sheet 1中插入了哪一行。我看到有人在使用lastRow(),但是并不总是将其插入到最后一行中-通常它位于中间的某个地方。

请求:

  1. 帮助使arrayformula在我的情况下起作用。
  2. 或帮助ModalDialog显示脚本生成的超链接。
  3. 或有关如何识别表单提交插入的行的帮助。还是只需要确保该表仍按TimeStamp排序,然后就可以使用lastrow()了?
  4. 建议采用一种更清洁的方法到达同一位置(从工作表1中的一行数据生成一个预先填充的表格。]

感谢您阐明前进的道路。

答案

您应该考虑使用ArrayForumlas将公式自动复制到第一列中具有值的其他行。

将此公式放在具有Google表单链接的列的第2行中。

=ARRAYFORMULA(
 IF(ISTEXT(A2:A),
  HYPERLINK(  
  CONCATENATE(
  "https://docs.google.com/forms/d/e/XXXXXXXXXXXXXXXX/viewform?usp=pp_url&entry.251357138=",C2:C,"&entry.966351469=",D2:D
)),""))

如果需要更多示例,我在复制公式时写了tutorial

另一答案

事实证明,我能够成功采用方法2,即modalDialog。由于某种原因,当我第一次尝试时没有对话框出现,所以我不知道这种方法是否存在根本性的错误。我再次尝试,如下图所示,所以我想我只是有一些错别字。添加target="_blank"有助于在新标签页中打开。

var htmlOutput = HtmlService
      .createHtmlOutput('Click to <a href="' + customFillURL + '" target="_blank">open and prefill</a> intake interview form.')
      .setWidth(250) //optional
      .setHeight(50); //optional
  SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Ready to fill intake interview form:');

以上是关于生成超链接以预先填充Google表单的主要内容,如果未能解决你的问题,请参考以下文章

HTML代码片段

如何最好地使用 php 预先填充单选按钮选择?

表单未预先填充Angular 8

使用预先生成的id创建一个mongoose记录

jQuery 预先添加到链接到 PDF 文件的所有超链接元素

使用Springboot进行表单管理 - 当用户选择预先输入时自动填充表单