javascript - 多个表单触发到单个工作表

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

我有一个 Google 电子表格,它从两种不同的表单中获取信息。

使用电子表格 UI 手动触发无法区分在触发器菜单中选择“OnFormSubmit”时指定的表单。

因此,我使用以下代码(对于我的工作表)来管理两个不同表单提交的两个不同触发事件:

function onOpen(e) {


var form = FormApp.openById('ID of Form 1');
 ScriptApp.newTrigger('onForm1Submit')
     .forForm(form)
     .onFormSubmit()
     .create();


var signup = FormApp.openById('[ID of Form 2]');
signup.setRequireLogin(true)
 ScriptApp.newTrigger('SignUpEvent')
     .forForm(signup)
     .onFormSubmit()
     .create();
}      
function SignUpEvent(e) {
\\stuff
}

function onForm1Submit(e) {
\\stuff
}

但是当我这样做时,我收到了表单提交失败的通知:

功能:更新梯形图

错误消息:“执行该操作需要授权。”

触发器:“formSubmit”

首先,我如何接收这些电子邮件通知?我没有手动要求错误消息的电子邮件通知。 其次,我获得“授权”的最佳方式是什么?

最佳答案

对于 onFormSubmit() 函数,您可以编写代码以将目标工作表与特定函数相匹配。例如,我有一个电子表格,其中有 2 个表单,其中都有用于目的地的工作表。在 onFormSubmit() 触发代码中,我做了以下操作:

function onFormSubmit(e) {
  Logger.log("[METHOD] onFormSubmit");
  var sheet = e.range.getSheet();
  var sheetId = sheet.getSheetId();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var student = ss.getSheetByName("Student Requests");
  var studentId = student.getSheetId();
  var teacher = ss.getSheetByName("Teacher Requests");
  var teacherId = teacher.getSheetId();
  if (sheetId == studentId){
    sendStudentEmail(e.range);
  }
  if (sheetId == teacherId){
    sendTeacherEmail(e.range)
  } 
} 

因此,在此示例中,教师可以使用表单进行请求,如果 onFormSubmit 与教师表单相关,则发送教师电子邮件等。

关于javascript - 多个表单触发到单个工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29130812/

相关文章:

javascript - 当用户快速键入时焦点会跳过

javascript - 为什么动态表不显示边框

javascript - Apps 脚本 - 无法在 html 模板的 js 函数中使用 google.script.run?

javascript - 设置新单元格值时保留格式(Google 电子表格)

javascript - 如何从 json 数组获取值填充选择(下拉)

javascript - 给定一个日期间隔范围,创建一个包含一天中所有 1440 分钟的数组,其中包含源间隔中每分钟出现的频率

javascript - jquery/Dropzone.js 获取添加图片的当前索引

javascript - 使用谷歌应用程序脚本返回多次出现的值

javascript - Google Sheets - 从硬盘驱动器获取文件名并插入到工作表中 - (模拟 Excel Application.GetOpenFilename)

google-apps-script - Google 电子表格 - 根据用户类型显示工作表