【问题标题】:Is it possible to create a google form that automatically updates its questions from a google sheet?是否可以创建一个谷歌表单,自动更新谷歌表格中的问题?
【发布时间】:2019-07-11 20:41:05
【问题描述】:

我有一个 google 表格,它每周 3 次记录另一个电子表格中的姓名列表。

我正在尝试制作一个谷歌表单,每周根据日志表生成的数据更新其问题 3 次,并跳过为不包含任何数据的单元格创建问题。在一周结束时(每 3 次提交),我希望表格汇总回答“是”的问题数量,并将包含该数量的电子邮件发送给几个人。我正在尝试格式化问题,如下所示。

“今天收集了(姓名)的样本吗?” -是的 -没有

在创建问题方面我没有尝试过任何事情,我是编码新手,我还没有找到任何非常适合的示例文本。

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sourceSheet = ss.getSheetByName('Data Sheet');
 var RDSheet = ss.getSheetByName('RawDataSheet');
 var lastrowdata = RDSheet.getLastRow();
 var RawData = sourceSheet.getRange(45,1,1,34);

 RDSheet.getRange(lastrowdata + 1, 1).setValue(new Date()); // Insert 
 timestamp for raw data
 RawData.copyTo(RDSheet.getRange(lastrowdata + 1, 2), {contentOnly: false});

我想创建一个表单,它可以从谷歌表格自动更新并根据结果生成一封电子邮件。

【问题讨论】:

  • 可以创建一个脚本来读取 Google 电子表格并根据该信息创建一个 Google 表单。

标签: google-apps-script google-sheets google-sheets-api google-forms


【解决方案1】:
  1. 要从电子表格动态更新表单问题,您需要将工作表中单元格中的值作为参数分配给问题的标题和选项。

这是一个基于Form Service References的代码sn-p:

function myFunction() {
    var form = FormApp.openById('Id of your form');
    var spreadsheet=SpreadsheetApp.openById('Id of your Spreadsheet');      
    form.setDestination(FormApp.DestinationType.SPREADSHEET, spreadsheet.getId());
    var source=spreadsheet.getSheetByName('Sheet1').getDataRange().getValues();
    var item = form.addCheckboxItem();
    item.setTitle(source[0][0]);          
    item.setChoices([item.createChoice((source[0][1])),item.createChoice((source[0][2]))]);
    form.addMultipleChoiceItem()
        .setTitle((source[1][0]))
        .setChoiceValues([(source[1][1]), (source[1][2])])
        .showOtherOption(true);
    form.addDateItem()
        .setTitle((source[2][0]));        
    Logger.log('Published URL: ' + form.getPublishedUrl());
    Logger.log('Editor URL: ' + form.getEditUrl());
}
  1. 要评估表单响应,请查看Class FormResponse reference

这是一个基于参考示例的代码 sn-p,它实现了 YesCounter 变量。它循环遍历所有表单提交的 itnerest 问题,并递增 YesCounter 以获取对问题的回答为“是”的所有答案。

var YesCounter=0;
var formResponses = form.getResponses();
for (var i = 0; i < formResponses.length; i++) {
  var formResponse = formResponses[i];
  var itemResponses = formResponse.getItemResponses();
 //assuming the question of interest is question number 1:
    var itemResponse = itemResponses[0];
    if(itemResponse.getResponse()=='yes'){
     YesCounter++
    }  
}
Logger.log('The number of questions answered "yes" was: '+Yescounter);
  1. 您可以将installtime-based trigger 链接到一个计算“是”并在您选择的时间间隔发送电子邮件的函数。

  2. 如果您不习惯使用 Apps 脚本,也可以使用一些有用的插件(请自行决定使用),例如,这里有一个自动实现动态字段更新的插件:

https://gsuite.google.com/marketplace/app/dynamic_fields/708020008404

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2022-10-15
    • 2013-12-05
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多