JavaScript 性能表单到工作表

JavaScript performance forms to sheet

提问人:frealk 提问时间:11/12/2023 最后编辑:frealk 更新时间:11/12/2023 访问量:166

问:

我有一个问题,我只是找不到解决方案。 这是关于我的剧本的表现。我通过表单将数据传输到我的工作表。我用“onFormSubmit(e)”截取这些数据,并根据条件将其拆分为另外两张纸。如果答案“let out”为“OK”,则所有与“Input”匹配项都应在指定列中补充“A-”。 当我使用所有 20 个输入数字运行脚本时,传输大约需要 20 秒。 我想把这个时间至少减少一半。关于如何实现这一点,你有什么建议给我吗?

function onFormSubmit(e) {
  let lock = LockService.getScriptLock();
  try {
    lock.waitLock(10000);
  } catch (e) {
    SpreadsheetApp.getUi().alert("⚠️ Timeout", "Try again later!", SpreadsheetApp.getUi().ButtonSet.OK);
    return;
  }

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const cpSheet = ss.getSheetByName('CP');
  const seSheet = ss.getSheetByName('SE');
  let out = "OK";
  let time = e.values[0];
  let email = e.values[1];
  let status = e.values[2];
  let info = e.values[23];
  
  let inputLen = e.values.filter(String).length-3;
    if (info) {
      let inputLen = inputLen - 1;
    }

    function getMultipleRowsData() {
      let data = [];
       for(let i =0, len = inputLen; i < len; i++) {
          let input = e.values[3+i];
            data.push([time, email, status, input, info]);
       }
      return data;
    }

 let data = getMultipleRowsData();
  if (status == out) {
    let lastRow1 = cpSheet.getLastRow();
    cpSheet.getRange(lastRow1 + 1,1,data.length, data[0].length).setValues(data);
  } else {
    let lastRow2 = seSheet.getLastRow();
    seSheet.getRange(lastRow2 + 1,1,data.length, data[0].length).setValues(data);
  } 
}

表单表如下所示:

时间 |电子邮件 |状态 |输入1 |输入2 |输入3 |... |输入20 |信息

我希望有人能帮助我。

JavaScript 表单 性能 for-loop google-sheets

评论

0赞 Tedinoz 11/13/2023
The script when I run it with all 20 input numbers takes about 20 seconds for the transmission.我的测试大约需要 1 秒。你还在这张纸上运行什么?
0赞 frealk 11/13/2023
你好。我的工作表上没有其他运行脚本。您是否使用谷歌表单作为数据输入对其进行了测试?
0赞 frealk 11/13/2023
也许这也是因为我直接在循环中使用表单变量。我将尝试一下,并首先将表单变量传递给数组。也许这会更好......你觉得怎么样?你是否可能在脚本的其他地方看到一个弱点,或者一个我可以改进的地方?
0赞 frealk 11/13/2023
另一个问题。e.values 和 e.response.getItemResponses()[0].getResponse() 之间有什么区别来获取表单数据。一种方式比另一种更好吗?
0赞 frealk 11/13/2023
首先将变量形式化为数组并不能解决问题:let input = [e.values[1], e.values[2],...][时间、电子邮件、状态、输入[1+i]、信息]

答: 暂无答案