我需要一个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();
这样,我只会在数量错误的情况下创建/删除触发器。
答案 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;
}
}