【问题标题】:Google form: create two rows with different information谷歌表单:创建两行不同的信息
【发布时间】:2021-12-15 21:05:21
【问题描述】:

我正在尝试创建一个包含 2 个字段的 Google 表单,一个用于“项目”,另一个用于“数量” 由于用户可能需要发送多个项目,我只想创建 1 个表单并对信息进行排序。

my Google form

到目前为止,我已经设法添加一个脚本,将“项目”中提交的信息拆分为多行,但是,我无法对“数量”字段执行相同操作

我从this post得到这个信息

这是我的脚本:

    function onFormSubmit(e) {
  var ss = SpreadsheetApp.openByUrl("URL_here");
  var sheet = ss.getSheetByName("FormResponses");
  // Form Response retrieved from the event object
  const formResponse = e.response;
  var itemResponses = formResponse.getItemResponses();
  
  // Add responses comma-separated included
  var rowData = itemResponses.map(item => item.getResponse().toString());
  rowData.splice(0, 0, formResponse.getTimestamp());


  // Split into different rows afterwards
  if (rowData[1].includes(',')) {
    rowData[1].split(',').forEach(instanceName => {
      let tmpRow = rowData.map(data => data);
      tmpRow[1] = instanceName;
      sheet.appendRow(tmpRow);

       // Append to the sheet
    });

  } 
  else {
    sheet.appendRow(rowData); // Append to the sheet
  }

当前结果:

Click here to see image

我想得到什么:

Click here to see image

谢谢

【问题讨论】:

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


    【解决方案1】:

    当我看到你的脚本时,只有rowData 的第二个元素与, 分开。我认为这可能是您的问题的原因。而且,当appendRow循环使用时,处理成本会变高。那么,在你的情况下,下面的修改呢?

    发件人:

    rowData.splice(0, 0, formResponse.getTimestamp());
    
    
    // Split into different rows afterwards
    if (rowData[1].includes(',')) {
      rowData[1].split(',').forEach(instanceName => {
        let tmpRow = rowData.map(data => data);
        tmpRow[1] = instanceName;
        sheet.appendRow(tmpRow);
    
         // Append to the sheet
      });
    
    } 
    else {
      sheet.appendRow(rowData); // Append to the sheet
    }
    

    收件人:

    var date = formResponse.getTimestamp();
    var values = rowData.map(v => v.includes(',') ? v.split(",") : [v]);
    var res = values[0].map((_, c) => [date, ...values.map(r => r[c] || "")]);
    sheet.getRange(sheet.getLastRow() + 1, 1, res.length, res[0].length).setValues(res);
    

    参考:

    【讨论】:

    • @Diego Arévalo 欢迎您。谢谢你让我知道。我很高兴你的问题得到了解决。如果您的问题得到解决,请按接受按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为您的问题和解决方案将对他们有用。如果找不到按钮,请随时告诉我。 stackoverflow.com/help/accepted-answer
    猜你喜欢
    • 1970-01-01
    • 2017-04-28
    • 2021-01-13
    • 2021-04-22
    • 2013-07-28
    • 2013-06-08
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多