是否可以创建一个Google表单,以自动从Google表格更新其问题?

时间:2019-07-11 20:41:05

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

我有一个Google工作表,它每周记录3次其他电子表格中的名称列表。

我正在尝试制作一个Google表单,以每周从日志单生成的数据中更新其问题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工作表自动更新,并根据结果生成一封电子邮件。

1 个答案:

答案 0 :(得分:0)

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

以下是基于Form Service References的代码段:

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

这是基于参考样本的代码片段,实现了YesCounter变量。对于所有表单提交,它遍历iterest的问题,对于问题的回答为“是”的所有答案,则递增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并将其链接到计算“是”并在您选择的时间间隔发送电子邮件的函数。 enter image description here

  2. 如果您不习惯使用Apps Script,还可以使用一些有用的加载项(由您自行决定),例如,以下是自动实现“动态字段更新”的加载项:

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