Все еще очень плохо знаком со скриптом Google App, но ему удалось настроить форму, которая заполняет электронную таблицу, а затем отправляет электронное письмо с вложением в формате PDF с отчетом на основе данных пользователей. Моя проблема заключается в том, что при одновременной подаче. Вложение формы отправляется последнему респонденту по электронной почте в количестве, равном количеству одновременных представлений. К счастью, по последним данным респондентов
Я пробовал SpreadsheetApp.flush (), а также LockService.getScriptLock (), но не смог решить проблему (возможно, из-за неправильного использования). Я включаю в этот код, который у меня есть. Помощь будет оценена. Спасибо
При этом обновленный код
//automatically send email with cash flow attached when form is submitted
function onFormSubmit(e) {
// change onFormSubmit() to onFormSubmit(e) when based on event otherwise just onFormSubmit()
var sourceSpreadSheet = SpreadsheetApp.openById("spreadsheetID");
var responseSheet = ss.getSheetByName("Form responses 1") ;
var data = e.range.getValues();
//var replied = data.offset(0, e.range.getNumColumns(),0,0);
//Logger.log(data)
//change to data = e.range when based on event alternatively responseSheet.getRange("A5:AA26").getValues();
//Get a lock on this script, because we're about to modify a shared resource
var lock = LockService.getScriptLock()
//Wait 30 seconds for other processes to finish
lock.waitLock(30000);
//Logger.log(data[0][2]); //- email address
var email = data[0][2];
var name = data[0][1];
var subject = "DelQS - Estimated cash flow for your project";
//Generate attachment
hideSheetsforPrint();
//additional parameters for exporting the sheet as a pdf
var url_ext = 'export?exportFormat=pdf&format=pdf' //export as pdf
// Print either the entire Spreadsheet or the specified sheet if optSheetId is provided
+ ('&id=' + sourceSpreadSheet())
// following parameters are optional...
+ '&size=A4' // paper size
+ '&portrait=false' // orientation, false for landscape
+ '&fitw=true' // fit to width, false for actual size
+ '&sheetnames=false&printtitle=false&pagenumbers=false' //hide optional headers and footers
+ '&gridlines=false' // hide gridlines
+ '&printnotes=false' // remove notes
+ '&fzr=false'; // do not repeat row headers (frozen rows) on each page
var options = {
headers: {
'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()
}
}
var response = UrlFetchApp.fetch("https://docs.google.com/spreadsheets/" + url_ext, options);
var blob = response.getBlob().setName('Estimated cash flow.pdf');
showAllSheets();
var projectName = data[0][3]; //project name (optional)
var htmlBody = HtmlService.createTemplateFromFile("notificationCashFlowEmail");
//set the values for placeholders in the html file
htmlBody.name = name;
//evaluate and get the html file
var emailHtml = htmlBody.evaluate().getContent();
GmailApp.sendEmail(email, subject, emailHtml, {htmlBody: emailHtml,attachments: [blob]});
var d = new Date();
//responseSheet.getRange(replied).setValue(d); //optional to below line
responseSheet.getRange(responseSheet.getLastRow(),responseSheet.getLastColumn()).setValue(d);
SpreadsheetApp.flush();
//Release the lock so that other processes can continue
lock.releaseLock();
}