【问题标题】:How to insert blank fields while inserting answers from Google Sheet to Form如何在将 Google 表格中的答案插入表单时插入空白字段
【发布时间】:2017-01-16 13:57:33
【问题描述】:

我已经设置了一个脚本,可以将现有答案从 Google 表格插入到我的 Google 表单中(通过调整来自 this answer 的代码)。我将它插入到表单脚本中,当工作表中的所有字段都填满时,它就可以工作了。但是,表单问卷的性质是,某些部分可能会被跳过,从而使工作表中的某些字段为空。我想插入这样一个表格,其中一些答案字段为空白。

脚本在工作表中的所有字段都已填满时有效,但在遇到空白字段时不起作用(这意味着其中包含任何空白字段的第一行答案会停止脚本的执行) .

我想知道的是如何向我的脚本解释它应该只接受空白答案并插入它们?

这是脚本:

function ApendResponses() {
  var form = FormApp.openById("1M-mTBlZPRj44jXs_YHj-cNa9yHjU25ItEWBuKtUvKZo");
  var sheet = SpreadsheetApp.openByUrl("https://ocs.google.com/spreadsheets/d/1Jc9NVlN-Wcmd87E-FnyocHgl5Vx2WXqOGPTkhvXjCFU/");
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  for (var x = 0; x < values.length; x++) {

    var formResponse = form.createResponse();
    var items = form.getItems();

    var row = values[x];

    var formItem = items[0.0].asTextItem();   
    var response = formItem.createResponse(row[1]);     
    formResponse.withItemResponse(response);

    var formItem = items[1.0].asTextItem();   
    var response = formItem.createResponse(row[2]);     
    formResponse.withItemResponse(response);

    var formItem = items[2.0].asListItem();   
    var response = formItem.createResponse(row[3]);     
    formResponse.withItemResponse(response);

    var formItem = items[3.0].asPageBreakItem();       
    formResponse.withItemResponse(response);

    var formItem = items[4.0].asListItem();   
    var response = formItem.createResponse(row[4]);     
    formResponse.withItemResponse(response);

    var formItem = items[5.0].asPageBreakItem();       
    formResponse.withItemResponse(response);

    var formItem = items[6.0].asListItem();   
    var response = formItem.createResponse(row[5]);     
    formResponse.withItemResponse(response);

    var formItem = items[7.0].asPageBreakItem();       
    formResponse.withItemResponse(response);

    var formItem = items[8.0].asTextItem();   
    var response = formItem.createResponse(row[6]);     
    formResponse.withItemResponse(response);

    formResponse.submit();
    Utilities.sleep(500);

  }

};

示例Form is here,及其accompanying Sheet here(我在第三行留了一个空白字段用于测试目的)。

【问题讨论】:

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


    【解决方案1】:

    这是一个可行的解决方案:

    function ApendResponses() {
      var form = FormApp.openById("1M-mTBlZPRj44jXs_YHj-cNa9yHjU25ItEWBuKtUvKZo");
      var sheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1Jc9NVlN-Wcmd87E-FnyocHgl5Vx2WXqOGPTkhvXjCFU/");
      var rows = sheet.getDataRange();
      var numRows = rows.getNumRows();
      var values = rows.getValues();
    
      for (var x = 0; x < values.length; x++) {
    
        var formResponse = form.createResponse();
        var items = form.getItems();
    
        var row = values[x];
    
        var formItem = items[0.0].asTextItem();
        if (!isempty(row[1])){
        var response = formItem.createResponse(row[1]);
        formResponse.withItemResponse(response);}
    
        var formItem = items[1.0].asTextItem();
        if (!isempty(row[2])){
        var response = formItem.createResponse(row[2]);
        formResponse.withItemResponse(response);}
    
        var formItem = items[2.0].asListItem();
        if (!isempty(row[3])){
        var response = formItem.createResponse(row[3]);
        formResponse.withItemResponse(response);}
    
        var formItem = items[3.0].asPageBreakItem();                       
        formResponse.withItemResponse(response);
    
        var formItem = items[4.0].asListItem();
        if (!isempty(row[4])){
        var response = formItem.createResponse(row[4]);
        formResponse.withItemResponse(response);}
    
        var formItem = items[5.0].asPageBreakItem();
        formResponse.withItemResponse(response);
    
        var formItem = items[6.0].asListItem();
        if (!isempty(row[5])){
        var response = formItem.createResponse(row[5]);
        formResponse.withItemResponse(response);}
    
        var formItem = items[7.0].asPageBreakItem();
        formResponse.withItemResponse(response);
    
        var formItem = items[8.0].asTextItem();
        if (!isempty(row[6])){
        var response = formItem.createResponse(row[6]);
        formResponse.withItemResponse(response);}
    
        formResponse.submit();
        Utilities.sleep(0.01);
    
      }
    
    }
    
    function isempty(entry) {
      if (entry == undefined)
      {
        return true;
      }
    
      if (entry == null){
       return true; 
      }
       var tempstr = entry.toString();
    
       tempstr = tempstr.replace(/[\r\n\t\s]+$/,"");
       tempstr = tempstr.replace(/^[\r\n\t\s]+/,"");
      if (tempstr.length == 0){
    
        return true;
      } else {
    
        return false;
      }
    
    }
    

    这个解决方案有两个问题:

    1. 它不会停止,即在脚本处理完最后一行之后,它会继续添加空白行。这很容易解决:在注入正确数量的答案后需要停止脚本,并且可以从表单的“响应”选项卡中单独删除任何多余的答案。

    2. 运行脚本有 6 分钟的时间限制。因此,该脚本无法处理大量答案(绝对不超过 500 个)。可以通过更好的脚本(停止、记录已处理的答案,然后从那里再次运行直到工作完成)或将答案分成几张并一张接一张地运行来解决问题。

    Source.

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多