Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script formSubmit中文件的增补者_Google Apps Script_Google Docs - Fatal编程技术网

Google apps script formSubmit中文件的增补者

Google apps script formSubmit中文件的增补者,google-apps-script,google-docs,Google Apps Script,Google Docs,我正在创建一个脚本来执行下面描述的操作。到目前为止,我已经设法使前两个部分正常工作,但现在我仍在继续工作。我已经查看了几个响应论坛并尝试了这些建议,但没有成功 所需的脚本流: 从电子表格表格提交的表格 完成字段: 时间戳 用户名(提交时收集的电子邮件) 大学生 等级 干预计划 核心阅读/数学 团队(电子邮件列表) 1脚本在FormSubmit上运行,然后创建模板文档的副本,将该新副本重命名为e.value“student”以表单形式提交 2然后用表单中提交的值替换文档中选定的文本字符串 3向新文

我正在创建一个脚本来执行下面描述的操作。到目前为止,我已经设法使前两个部分正常工作,但现在我仍在继续工作。我已经查看了几个响应论坛并尝试了这些建议,但没有成功

所需的脚本流: 从电子表格表格提交的表格 完成字段: 时间戳 用户名(提交时收集的电子邮件) 大学生 等级 干预计划 核心阅读/数学 团队(电子邮件列表)

1脚本在FormSubmit上运行,然后创建模板文档的副本,将该新副本重命名为e.value“student”以表单形式提交

2然后用表单中提交的值替换文档中选定的文本字符串

3向新文档添加编辑器,并发送带有所需说明的通知

4创建活动(从提交日期算起一周)活动详细信息包括说明和到共享文档的链接,供团队成员完成输入,向电子邮件列表发送活动邀请

这是目前为止的工作脚本

function formSubmitValues(e) {

  var timeStamp = e.values[0];
  var userEmail = e.values[1];
  var student = e.values[2];
  var grade = e.values[3];
  var conern = e.values[4];
  var readingCore = e.values[5];
  var mathCore = e.values[6];
  var interventions = e.values[7];
  var team = e.values[8].toString(); // "just to be sure"..Henrique says add .toString      this allowed the replaceText part to work

  //Makes copy of template document and renames
  var tempID = ("1Rq0pDAnuGNfL6W3GB0ZuLeWM2uYzHpKzoyxoXlwjtgE") // use document ID from Template Document
  var copyId = DocsList
              .getFileById(tempID)
              .makeCopy(student + " Initial Referral") // names new copy as student's name
              .getId();

// trying to add editors to new document using email list generated in form submit value of "team"
DocsList.getFileById(copyId).addEditors([team]); 




// replaces text within template with selected fields from formSubmitValues
  var doc = DocumentApp.openById(copyId)  
  var body = doc.getActiveSection();

    body.replaceText("%STUDENT%", student);
    body.replaceText("%DATE%", timeStamp);
    body.replaceText("%TEACHER%", userEmail);
    body.replaceText("%TEAM%", team);

  return doc;

}
报告的问题响应:他们说:“函数采用数组或字符串,如:
DocsList.getFileById(copyId).addEditors(['parent@domain.com', 'parent2@domain.com”);

我试着像这样把电子邮件直接输入到脚本中,效果很好。 因此,我的问题不是“
addEditors
方法,而是如何正确传递表单提交的电子邮件。有什么建议吗

我已经尝试过使用或不使用.toString()和使用.Split(“,”)的所有组合

重新定义问题:因此这是一个如何从e.values表单提交中传递电子邮件的问题

这就是我现在的处境: 当我直接在脚本中键入电子邮件时:
.addEditors(['parent@domain.com', 'email2@domain.net', 'email3@gmail.com“]
它可以工作(我确实需要将脚本中的
addEditors
方法移到
.makeCopy
之后,而不是移到末尾。) 这是执行记录显示的内容:
File.addEditors([[parent@domain.com, email2@domain.net]])
,它运行脚本的其余部分。注意:我不理解的一部分是单引号,即“电子邮件”,它们必须在脚本中键入,但在运行时不会显示在成绩单上。我尝试将它们放在表单中的电子邮件周围,但它会使它们显示在成绩单中,并且仍然无法运行

这就是脚本现在的样子:

var tempID = ("1Rq0pDAnuGNfL6W3GB0ZuLeWM2uYzHpKzoyxoXlwjtgE") // use document ID from Template Document
var copyId = DocsList
              .getFileById(tempID)
              .makeCopy(student + " - TestingCopy") // names new copy as student's name + text
              .addEditors([team.split(',')])  
              .getId();
但是当我使用
var团队时,无论是否使用
.split(',')
它都不起作用。但是在转录本中它显示:
File.addEditors([[rreynolds@domain.net, parent@domain.com]])
这看起来与它工作时显示的内容相同,但这是在转录本中显示的最后一件事,编辑器不会添加到文档中,脚本也不会完成

我显然不理解这里的某些内容。是否有一种方法可以让团队e中的电子邮件以addEditors方法所要求的方式进行处理?在电子表格单元格中,它们显示为CSVrreynolds@domain.net, parent@domain.com 他们必须一次读一个吗,还是什么的


我学到了很多,非常感谢你的帮助。我很抱歉对所有评论感到困惑,但我不确定如何正确地解决这个论坛中的问题。例如:我应该返回并编辑我的原始脚本以显示当前版本,还是将其添加到其他地方?我正在努力保持对话的流畅性,以便它是easier供其他人跟随-谢谢rob

我建议几件事

  • 在代码中添加几个Logger.log语句以打印调试信息
  • 在代码的整个部分添加一个try…catch块并打印出异常。查看是否有异常

  • 最后,使用“执行记录”窗口查看脚本停止的位置(如果停止了)。

    通过电子邮件添加编辑器有两种方法:
    添加编辑器([emailAddresses])
    添加编辑器(emailAddress)

    第一个有一个“s”,需要一个电子邮件地址字符串数组,第二个以单个字符串作为参数。您应该使用第二个或在代码中向电子邮件字符串添加[括号]

    关于你的评论//需要弄清楚在哪里/如何:。添加者(email1、email2等); //这是从DocsList类还是DocumentApp类完成的

    addEditor()
    addEditor()
    属于,作为DocsList类的成员,您可以使用用户对象或用户电子邮件添加用户,如文档中所述。 它可以像这样使用
    DocFile.addEditors([email1,email2])

    编辑:这篇文章有很多评论,很抱歉,阅读起来很不方便……我用电子表格测试了这些加法器的功能,结果与预期一样,使用简单数组处理多个用户的电子邮件,使用字符串处理单封电子邮件。
    文档服务
    似乎与
    加法器()有问题
    方法,并应将其报告给问题跟踪者

    已报告我已报告-Rocketrob

    请让我给出最后(希望)明确的答案:(感谢分享电子表格,这更容易操作;-)

    这里是你的代码完全工作

    我创建了一些中间变量来说明它是如何工作的

        function formSubmitEditors(e) {
    
          // defines spreadsheet form events on submit of form.  This function formSubmitEditors is triggered on formSubmit
          var timeStamp = e.values[0];
          var fileName = e.values[1];
          var team = e.values[2].replace(/, /g,"|"); // remove unwanted spaces and commas replace by | for visibility ;-)
          Logger.log(team);// contains | as separators
          var teamArray = team.split('|');
          Logger.log(teamArray.length+'  :  '+teamArray);// check that it is an array of x elements
    
          //Makes copy of template document and renames
          var tempID = '1Rq0pDAnuGNfL6W3GB0ZuLeWM2uYzHpKzoyxoXlwjtgE' // use document ID from Template Document
          var copyId = DocsList
                      .getFileById(tempID)
                      .makeCopy(fileName + " - TestingCopy") // names new copy as student's name + text
                      .getId();                     // 
        var file = DocsList.getFileById(copyId).addEditors(teamArray);
    
        // replaces merged-text values within template with selected fields from formSubmitValues
          var doc = DocumentApp.openById(copyId)
          var body = doc.getActiveSection();
    
            body.replaceText("%FILE%", fileName);// you wrote %FILENAME% in place of %FILE%
            body.replaceText("%DATE%", timeStamp);
            body.replaceText("%TEAM%", team);// it will be shown with | as separators, if you don't like it replace team by teamArray.toString() to get commas again.
         }
    
    编辑:我删除了team事件的toString(),这不是必需的,因为e.parameters已经是字符串了

    EDIT2:为了完成并完成初始问题中需要的操作,您可以将代码结尾替换为下周创建Cal事件并发送带有文档链接的邀请的代码

      var file = DocsList.getFileById(copyId).addEditors(editorsArray);
      var fileurl = file.getUrl();
      Logger.log(fileurl)
    
    // replaces merged-text values within template with selected fields from formSubmitValues
      var doc = DocumentApp.openById(copyId)
      var body = doc.getActiveSection();
    
        body.replaceText("%FILE%", fileName);
        body.replaceText("%DATE%", timeStamp);
        body.replaceText("%MAILS%", editors);
    
      var Cal = CalendarApp.getCalendarsByName('testencodage')[0];// replace with your calendar name you want to use
      var newEvent = Cal.createAllDayEvent('Fill the questionnary', new Date(new Date(newtimeStamp).getTime()+7*24*3600*1000), { guests : e.values[2] , sendInvites : true , description :"Don't forget to fill this document "+fileurl})
     }
    

    只需在一封电子邮件中使用此功能,但无法使用g