【问题标题】:FormApp - Alternative to switch statement? [duplicate]FormApp - switch 语句的替代方案? [复制]
【发布时间】:2020-04-09 16:38:52
【问题描述】:

是否有替代 switch 语句的替代方法(更快、更简单)来捕获表单提交响应并将它们存储为变量而不依赖于索引?

背景:此脚本最终会根据某些项目响应条件向一群不同的人发送电子邮件。我只是在帮助一位同事,所以我不拥有该表格。因此,我希望我的脚本不基于问题位置,而仅基于问题标题。我目前正在考虑,当需要创建将生成电子邮件的条件时,我需要将响应存储为变量以提高可读性。这只是一个简单的例子,但实际的表格大约是 10 个部分的 25 个问题。

function onSubmit(e) {

  var formResponse = e.response;
  var itemResponses = formResponse.getItemResponses();

  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    
    switch (itemResponse.getItem().getTitle()) {
      case 'Name:':
        var studentName = itemResponse.getResponse();
        break;
      case 'Email Address:':
        var email = itemResponse.getResponse();
        break;
    }
  }
  
  console.log(studentName + ' ' + email);
}

【问题讨论】:

  • 从响应电子表格中完成并使用标题行来识别列会更容易吗?
  • @JamesD 将有数千个表单提交,所以我认为在提交表单时运行一次条件会更简单,而不是让它通过响应表上的所有提交.
  • 如果我从响应表运行,我是否需要添加一个标志或其他东西让脚本知道哪些表单响应是新的,哪些已经处理?
  • @ZachG 提交的数量不会有太大的影响(直到最大单元格数)存在脚本可能无法成功执行然后尝试排除故障并继续使用的风险任何错过的提交都会很困难(例如不正确的电子邮件地址)。表单上的 onSubmit 仍然以相同的方式工作,它只会处理提交的行,但添加一个标志可以让您构建提交日志并在需要时轻松重新发送任何提交。
  • @JamesD 谢谢!我会从另一面重写它。

标签: google-apps-script


【解决方案1】:

流程:

  • 为所有itemResponses的标题创建一个别名Map =>别名
  • 创建另一个 [alias, response] 的 responseMap。
  • 您可以通过 responseMap 从其别名中获取任何响应

脚本:

/**
 * @param {GoogleAppsScript.Events.FormsOnFormSubmit} e
 */

function onSubmit(e) {
  const formResponse = e.response;
  const itemResponses = formResponse.getItemResponses();
  const aliasMap = new Map([
    ['Name:', 'studentName'], //[title,alias]
    ['Email Address:', 'email'],
  ]);
  const responseMap = new Map();
  itemResponses.forEach(response =>
    responseMap.set(
      aliasMap.get(response.getItem().getTitle()),
      response.getResponse()
    )
  );

  console.info(responseMap.get('studentName') + ' ' + responseMap.get('email'));
}

【讨论】:

    猜你喜欢
    • 2011-01-19
    • 1970-01-01
    • 2022-11-22
    • 2014-05-22
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多