Google表单提交时更快/更有效的方式调用脚本

时间:2018-08-18 20:40:32

标签: javascript google-apps-script google-sheets google-form

我需要一个Google脚本来在用户提交表单时运行。我无法在表单提交中使用来自电子表格的简单的“添加项目触发器”,因为此电子表格附带有多个表单。我当前解决此问题的方法大部分时间都在起作用。我经常收到服务器错误,我认为这是由于代码效率极低造成的。 有人对如何改善它有建议吗?

byte[] byteArray = System.IO.File.ReadAllBytes(path);
using (MemoryStream mem = new MemoryStream())
{
mem.Write(byteArray, 0, (int)byteArray.Length);
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(mem,   true))
 {
   string docText = "";
   StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream());
                using (sr)
                {
                    docText = sr.ReadToEnd();
                }

                docText = docText.Replace("<UserName>", model.UserName );
            }

//How to I get the docText back into the MemoryStream to download:-
return (ActionResult)File(mem.ToArray(), "application/msword");

编辑:感谢您的帮助。 这样可以解决问题吗?

var allTriggers = ScriptApp.getProjectTriggers();
for(i=0;i<allTriggers.length;i++) 
    ScriptApp.deleteTrigger(allTriggers[i]);
var form = FormApp.openById('1tFb-_oaGPRvWpdvXz6nx01rk71m-lLQnM5arjbuz3r4');
ScriptApp.newTrigger('sendEmails')
 .forForm(form)
 .onFormSubmit()
 .create();

这样,我只会在数量错误的情况下创建/删除触发器。

1 个答案:

答案 0 :(得分:2)

您可以安装一个onFormSubmit(event)触发器。事件对象是添加的单元格的范围。在该范围内,您可以获得受影响的工作表,例如“表单响应1”,“表单响应2”等。然后在函数onFormSubmit(event)中进行切换

function onFormSubmit(event) {
  switch(event.range.getSheet().getName()) {
    case "Form Response 1":
      // do something
      break;
    case "Form Response 2":
      // do something else
      break;
  }
}