【问题标题】:How to add a simple calculated field to a google form?如何将简单的计算字段添加到谷歌表单?
【发布时间】:2015-06-18 12:29:44
【问题描述】:

我正在寻找一种在谷歌表单中添加简单计算字段的方法,该表单将依赖于其他字段的值。

第一个字段是简单的价格字段quantity * price = total_price,其中数量是用户输入的数字字段。

第二个字段是结束日期now() + X months,其中 X 由用户选择。

我查看了谷歌的教程,发现只有在我的理解中是表单范围的插件,我正在寻找更像自定义表单字段的东西。

最好的解决方案是在用户更改其他输入的值时计算字段,但确认页面中的简单文本也可以。

如果有人能指出我正确的方向,我将不胜感激。 谢谢。

【问题讨论】:

  • 据我所知,在 Google 表单中,在提交表单之前无法获取实时表单值。
  • 添加一个根据输入字段计算的值的确认页面怎么样?

标签: google-apps-script google-forms


【解决方案1】:

脚本只会影响表单的创建和提交后处理。您不能对用户当前正在查看的“实时”表单进行任何更改。您可以做的是在表单提交后向用户发送一封电子邮件,其中包含计算的摘要。如果他们发现任何错误,您可以包含指向 getEditResponseUrl() 的链接。

【讨论】:

  • 我现在意识到实时更新会很费力,但是如何添加一个确认页面,其中的值是根据输入字段计算出来的?
  • 那也行不通。您可以更改提交时的确认字段,但直到用户下次启动实时表单时才会看到更改。
  • 所以要确保我们在同一页面上。您声称,如果我想将一段文本注入确认页面,该文本源自用户在实时表单中输入的值,这是不可能的?
  • 没错。如果要计算值,则使用值更改 setConfirmationMessage() 或指向具有计算值的文档,直到下次启动实时表单时才会显示。
  • 如果您已经对 Apps 脚本感到满意,那么制作一个简单的 Web 应用程序非常简单。然后,您将获得所需的所有灵活性。
【解决方案2】:

正如其他人所提到的,Google 表单不支持实时计算值。但是,有 2 个 Google 表单插件可以让您这样做(免责声明:我创建了它们):

  1. 对于像你提到的那些简单的表达式(数量 * 价格 = total_price) 您可以使用 Formfacade 插件 - https://formfacade.com/website/google-forms-calculated-fields.html
  2. 对于包含订单总额、运费和 订单摘要,您可以使用 Neartail 插件 - https://formfacade.com/neartail/automatically-calculate-total-amount-in-order-form.html

【讨论】:

    【解决方案3】:

    我也有这个问题。我需要使用来自谷歌表单的答案构建一个控制板,问题:当您在提交答案的工作表旁边的列中使用公式时,谷歌会插入一个新行但不会复制公式,所以你最终一遍又一遍地复制和粘贴公式。

    为了解决这个问题,我使用了一个脚本来复制公式所在的单元格并将其粘贴到答案所在的所有行中。

    脚本很简单,首先你必须在“工具”菜单中打开脚本编辑器,然后粘贴下面的代码。您只需在代码中“调用”具有名称的工作表,然后标记公式所在的列。在这种情况下,hoja1 是“BD ingresos”,hoja2 是“DB gastos”

    在这种情况下,我有表单部署答案的工作表是“BD ingreso”和“BD gastos”,我计算的列是“BD ingresos”中的 A、B、C、D 和 E 与“BD Gastos”。

    (西班牙语名字,对不起)

    // Activar la hoja actual 
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    // se guarda hoja1 
    var hoja1 = ss.getSheetByName("BD ingreso");
    var hoja2 = ss.getSheetByName("BD gastos")
    
    function actualizar() {
    
    // obtener ultima fila de la hoja 
    var ultimaFila = hoja1.getLastRow();
    
    rellenarColumna("A",ultimaFila,hoja1);
    rellenarColumna("B",ultimaFila,hoja1);
    rellenarColumna("C",ultimaFila,hoja1);
    rellenarColumna("D",ultimaFila,hoja1);
    rellenarColumna("E",ultimaFila,hoja1);
    
    // obtener ultima fila de la hoja 
    var ultimaFila = hoja2.getLastRow();
    
    rellenarColumna("A",ultimaFila,hoja2);
    rellenarColumna("B",ultimaFila,hoja2);
    rellenarColumna("C",ultimaFila,hoja2);
    rellenarColumna("D",ultimaFila,hoja2);
    rellenarColumna("E",ultimaFila,hoja2);
    
    }
    
    
    function rellenarColumna(pivote, ultimaFila,hojaTrabajo)
    {
     //------------------------------------------------------------- 
     //celda que contiene la información que se va a pegar. 
      var celdaCopiarFormula = hojaTrabajo.getRange(pivote+"2");
      //obtener valor de dicha celda
     var valorCeldaCopiarFormula = celdaCopiarFormula.getFormula();
    
     //modificar rango para que pegue la información desde la ubicacion enviada hasta la ultima fila 
    var rangoTotal = pivote + "2:" + pivote + ultimaFila; 
    
    
    //definir ubicacion en donde se va a pegar la informacion
    var destinoPegado = hojaTrabajo.getRange(rangoTotal);
    destinoPegado.setFormula(valorCeldaCopiarFormula);   
    }
    

    Then you have to create a trigger in the script editor as this image shows. Set the trigger to launch the code "actualizar" with the event "from the spreadsheet" "on form submit"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 2016-04-30
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多