用于在多个位置填充GoogleForms响应的脚本

时间:2017-04-15 17:46:59

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

我正在尝试将相同的电子表格用于多个自动和半自动功能,其中一个功能是允许用户提交GoogleForms数据。

我的目标是提取表单回复,这样主表上的下一个空白行(标题为" Apps")就会填充新提交的数据(其中列名与列名相同) "表格回复"表格)。

我一直在玩下面的内容,OnEdit(e)设置为"表格提交"但那并不能让我得到我需要的东西。

function onEdit(e){
    var ui = SpreadsheetApp.getUi(); 
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var range = e.range;
    var sheet = range.getSheet()
    var newSheet = ss.getSheetByName("Apps")
    var sheetName = sheet.getName()
    if(sheetName != "Form"){
       return                            //exit function
    }  
    var columnOfCellEdited = e.range.getColumn();
    if (columnOfCellEdited === 1) 
     var range2 = range.getRow();
     var destrange = newSheet.getLastRow()
     sheet = newSheet
         // adds the formulas
         var cell = sheet.getRange("C" + destrange);
      cell.setFormula('=Form!$C' + destrange);
         var cell = sheet.getRange("D" + destrange);
         cell.setFormula('=Form!$D' + destrange);
         var cell = sheet.getRange("E" + destrange);
         cell.setFormula('=Form!$E' + destrange);
         var cell = sheet.getRange("F" + destrange);
         cell.setFormula('=Form!$F' + destrange);
         var cell = sheet.getRange("G" + destrange);
         cell.setFormula('=Form!$G' + destrange);
         var cell = sheet.getRange("H" + destrange);
         cell.setFormula('=Form!$H' + destrange);
        }

最后,我发现这个SO answer看起来如果我知道把东西放在哪里会有帮助。

编辑:下面尝试根据MrRebot建议实施,不会产生任何可见的结果。表格还应该挂单?

function onEdit(e) {
   var form = FormApp.openById('1YLnK8kw2dRMUUvL1l3s4qjz9fSRIe7kj92MlPV5WV5M');
 var formResponses = form.getResponses();
 for (var i = 0; i < formResponses.length; i++) {
   var formResponse = formResponses[i];
   var itemResponses = formResponse.getItemResponses();
   for (var j = 0; j < itemResponses.length; j++) {
     var itemResponse = itemResponses[j];
     Logger.log('Response #%s to the question "%s" was "%s"',
         (i + 1).toString(),
         itemResponse.getItem().getTitle(),
         itemResponse.getResponse());
   }
 }
  var ss = SpreadsheetApp.getActiveSheet();
  ss.insertRowAfter(ss.getLastRow());
  ss.getRange(ss.getLastRow(),1,1,ss.getLastColumn()).copyTo(ss.getRange(ss.getLastRow()+1,1));
}

1 个答案:

答案 0 :(得分:1)

在表单提交时,请尝试使用FormResponse获取回复列表。请参阅示例代码:

 // Open a form by ID and log the responses to each question.
 var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
 var formResponses = form.getResponses();
 for (var i = 0; i < formResponses.length; i++) {
   var formResponse = formResponses[i];
   var itemResponses = formResponse.getItemResponses();
   for (var j = 0; j < itemResponses.length; j++) {
     var itemResponse = itemResponses[j];
     Logger.log('Response #%s to the question "%s" was "%s"',
         (i + 1).toString(),
         itemResponse.getItem().getTitle(),
         itemResponse.getResponse());
   }
 }

然后尝试将此代码发送到insert a new row

var ss = SpreadsheetApp.getActiveSheet();
  ss.insertRowAfter(ss.getLastRow());
  ss.getRange(ss.getLastRow(),1,1,ss.getLastColumn()).copyTo(ss.getRange(ss.getLastRow()+1,1));

希望这有帮助。