Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按索引顺序重建e.NamedValue,在Google应用程序脚本中推送到文档_Javascript_Google Apps Script - Fatal编程技术网

Javascript 按索引顺序重建e.NamedValue,在Google应用程序脚本中推送到文档

Javascript 按索引顺序重建e.NamedValue,在Google应用程序脚本中推送到文档,javascript,google-apps-script,Javascript,Google Apps Script,我有一个谷歌表单,它有许多不同的分支;因此,在总共约100个问题中,任何给定的回答仅包括约20个答案。我试图找到一种方法来删除答案为“”(空白)的问题和答案,然后将这些问题和答案推送到谷歌文档中 我正在使用FormSubmit上触发的e.namedValue。但是,当然,e.namedValues实际上并没有按照提问的顺序返回回答。我需要一种方法: 构建一系列问题和答案,其中只有那些问题和答案显示在答案有答案的地方 对该数组进行排序,使问题和答案按提问顺序排列 将该数组放入Google文档(

我有一个谷歌表单,它有许多不同的分支;因此,在总共约100个问题中,任何给定的回答仅包括约20个答案。我试图找到一种方法来删除答案为“”(空白)的问题和答案,然后将这些问题和答案推送到谷歌文档中

我正在使用FormSubmit上触发的e.namedValue。但是,当然,e.namedValues实际上并没有按照提问的顺序返回回答。我需要一种方法:

  • 构建一系列问题和答案,其中只有那些问题和答案显示在答案有答案的地方

  • 对该数组进行排序,使问题和答案按提问顺序排列

  • 将该数组放入Google文档(理想情况下是一个表,但我无法使用我正在构建的数组)

  • 以下是我当前的代码:

    function formResponsetoGoogleDoc(e) {
      var formID = {{ Insert FormID Here }};
      var response = e.namedValues;
      var document = DocumentApp.create('Test').getBody();
      var questions = FormApp.openById(formID).getItems();
      var questionarray = [];
      for (Key in response) {
        var label = Key;
        var data = response[Key];
        if (data != "") {
          for (q in questions) {
            var title = questions[q].getTitle();
            if (title == label) {
              var number = questions[q].getIndex();
            }
          }
          questionarray.push(number + " - " + label + ": " + data);
          document.appendListItem(number + " - " + label + ": " + data)
        }
      }
      questionarray.sort();
      Logger.log(questionarray);
    }
    
    这个代码不起作用。目前,questionarray按问题的顺序进行排序(例如,0、0、15、16、17、18、18、19、2、20、21、23、24)。此外,每当我尝试将其用作appendtable时,都会得到“异常:参数(编号[])与DocumentApp.Body.appendtable的方法签名不匹配。”


    非常感谢您能给予的任何帮助。也愿意考虑使用E.值,但是我从来没有弄明白如何从两个数组中剔除问题和(非)答案。我也有太多的问题来证明硬编码replacetext选项的合理性,所以我试图避免这种情况。

    您可能需要与这个问题斗争一段时间,因为您似乎无法清楚地表达一个非常具体的问题。但你似乎有兴趣确定哪些答案已经被回答,以什么顺序被回答,而且你似乎想要不被回答的答案的索引。我相信这个数据集会让你对如何获得这些信息有一些了解。每个表单提交的信息随标题一起附加到电子表格中

    function onMySubmit(e) {
      const ss=SpreadsheetApp.getActive();
      const sh=ss.getSheetByName('Sheet1');
      let arr1=[['Header','Value',Index','Column']];
      let sh=e.range.getSheet();
      let hA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
      let col={};
      let hdr={};
      hA.forEach((h,i)=>{col[i]=i+1;hdr[i]=h;});
      e.values.map((v,i)=>{arr1.push([hdr[i],v,i,col[i]]);});
      sh.getRange(sh.getLastRow()+1,1,arr1.length,arr1[0].length).setValues(arr1);  
    }
    
    答复: 在存储空值的索引时,可以使用筛选器删除空响应

    代码示例: 让
    e.values
    为:

    e.values = ["Response 0", "Response 1", "", "Response 3", "Response 4", "", "", "", "Response 9"];
    
    我们可以过滤掉空响应,并使用另一个数组存储已删除的索引:

    function filterValues(e) {
      var indices = [];
      var filtered = e.values.filter(function (response, i) {
        if (response == "") indices.push(i);
        return response != "";
      });
      
      console.log(filtered);
      console.log(indices);
    }
    
    将在控制台中显示以下内容:

    Jan 11, 2021, 10:50:33 PM   Debug   [ 'Response 0',
      'Response 1',
      'Response 3',
      'Response 4',
      'Response 8' ]
    Jan 11, 2021, 10:50:33 PM   Debug   [ 2, 5, 6, 7 ]
    
    我希望这对你有好处

    参考资料:

    根据我对Google Forms e的有限经验,价值观与表单的顺序相同。此外,我相信命名价值观的名称来自回复表的标题行。因此,如果希望以与表单相同的顺序访问命名值,则可以迭代头数组,以相同的顺序访问命名值数据。如果这是你想要的,我不太确定你能把它链接到一个电子表格上吗?这样回答就会自动按提问顺序发布,然后从表格中提取到一个文档或表格中?正如@Rafa Guillermo所说,这是一个可行的解决方案吗。Google表单的响应可以发送到电子表格,您可以从电子表格中提取数据作为数组,并进行各种过滤。@Cooper您是对的,e.值与表单的顺序相同,因此我可以得到它和标题的一维数组,但是,我需要一种方法,以某种方式从数组中删除空的e.values,同时还存储这些删除的索引号,以便从标题数组中删除这些索引。老实说,我不知道该怎么做。