Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 Google应用程序脚本-onFormSubmit()触发器中的延迟和涉及的自动化_Google Apps Script_Google Sheets_Google Forms - Fatal编程技术网

Google apps script Google应用程序脚本-onFormSubmit()触发器中的延迟和涉及的自动化

Google apps script Google应用程序脚本-onFormSubmit()触发器中的延迟和涉及的自动化,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,背景: 我有一个运行在谷歌表单响应上的谷歌应用程序脚本。 在每个新表单响应上,自动化执行以下操作: 文档模板由值填充,转换为pdf,存储在google drive文件夹中 问题: 问题是我目前有1110多个回复。自动化过程大约是1100多个 每一个新的响应都会导致自动化过程启动3到4个响应。 例如,第1111次响应启动了1101和1102响应的进程 基本上,onFormSubmit()函数和生成的文件都存在延迟 我能想到的是: -我应该在脚本的某个地方使用类似于flush()的东西 或者我应该让

背景:

我有一个运行在谷歌表单响应上的谷歌应用程序脚本。 在每个新表单响应上,自动化执行以下操作: 文档模板由值填充,转换为pdf,存储在google drive文件夹中

问题:

问题是我目前有1110多个回复。自动化过程大约是1100多个

每一个新的响应都会导致自动化过程启动3到4个响应。 例如,第1111次响应启动了1101和1102响应的进程

基本上,
onFormSubmit()
函数和生成的文件都存在延迟

我能想到的是: -我应该在脚本的某个地方使用类似于
flush()
的东西

或者我应该让这些东西自己运行,自动化将有望赶上表单提交

任何帮助都将非常感谢,因为表单是实时的,并且响应不断

编辑1:

var docTemplate = "SOME VALUE"; // DOC TEMPLATE FILE
var docName = "SOME VALUE";

// When Form Gets submitted
function onFormSubmit(e) {
  // Get information from form and set as variables
  var timestamp=e.values[0];
  var emailAddr=e.values[1];
  var firstName=e.values[2];
  Logger.log(e);
  // Get document template, copy it as a new temp doc, and save the Doc’s id
  var copyId = DriveApp.getFileById(docTemplate).makeCopy(docName).getId();
  // Open the temporary document
  var copyDoc = DocumentApp.openById(copyId);
  // Get the document’s body section
  var copyBody = copyDoc.getActiveSection();

  // Replace place holder keys,in our google doc template
  copyBody.replaceText('keyFirstName',firstName);

  // Save and close the temporary document
  copyDoc.saveAndClose();

  // Convert temporary document to PDF
  var pdf = DriveApp.getFileById(copyId).getAs('application/pdf');
  pdf.setName(copyDoc.getName() + ".pdf");
  var file = DriveApp.createFile(pdf);
  var fileId = file.getId();
  var pdfFolder = DriveApp.getFolderById("SOME VALUE");  //PDF FOLDER
  pdfFolder.addFile(file);
  DriveApp.getFileById(fileId).getParents().next().removeFile(file);

  // Move temp file
  var docFolder = DriveApp.getFolderById("SOME VALUE"); //DOC FOLDER
  var srcFolder = DriveApp.getFolderById("SOME VALUE"); //PROJECT FOLDER
  var docFile = DriveApp.getFileById(copyId);
  docFolder.addFile(docFile);
  srcFolder.removeFile(docFile);
}

您不能使用触发函数可用的事件对象-这将保证您只对自动化函数中的单个响应进行操作,而不是从工作表中读取。分离任务可能会使您受益。提交表单时,生成文档文件。然后,比如说每小时,将给定文件夹中的文档文件转换为PDF并将其移动。@urwaCFC“我们遇到了技术难题”,整理您的处理,然后重新打开表单。作为公开发布前压力测试的一部分,这种情况本应出现……好吧,仔细检查后,我意识到我假设的滞后根本不是滞后。相反,新的答复并没有添加在表格的末尾,而是添加了上面的10个条目。基本上,脚本运行得很好。底部的10个条目是旧的响应。帮助理解的屏幕截图:这通常发生在数据行被清除但未被删除时。如果您正在测试表单,并且希望删除测试提交,那么您应该删除行,而不仅仅是清除数据。