我在电子表格中有代码,触发器在表单提交时运行它。该代码应首先创建一个链接,以允许编辑提交的表单数据。它在较旧的工作表中运行良好,但在我最近的迭代中,它没有在继续之前保存链接。
这是代码的开头,它是触发器中列出的函数:
function sendRegEmails(e) {
var emailSubject = templateSheet.getRange("B3").getValue();
var emailHTMLTemplate = templateSheet.getRange("B4").getValue();
var emailWSAddInToHTMLTemplate = templateSheet.getRange("B9").getValue();
var emailWSReqFormLinkHTMLTemplate = templateSheet.getRange("B10").getValue();
//Create and save the URL to allow the respondent to edit their registration
assignEditUrls(REGISTRATION_FORM_ID, REGISTRATION_SHEETNAME, REGISTRATION_LINK_COL);
Utilities.sleep(5000);// pause in the loop for 5000 milliseconds or 5 seconds to make sure the URL is in the worksheet
// Create one JavaScript object per row of data.
var objects = getRowsData(mainsheet);
// For every row object, create a personalized email from a template and send
// it to the appropriate person.
for (var i = 0; i < objects.length; ++i) {...(continues)
此代码位于同一项目中的另一个.gs文件中:
/**-----------------------------------------------------------------------------------
|
| Begin section to create link to editable form
|
------------------------------------------------------------------------------------*/
function assignEditUrls(PassedForm_ID, SheetName, urlCol) {
var form = FormApp.openById(PassedForm_ID);
var sheet = SpreadsheetApp.openById(REGISTRATION_SHEET).getSheetByName(SheetName);
var data = sheet.getDataRange().getValues();
var responses = form.getResponses();
var timestamps = [], urls = [], resultUrls = [];
for (var i = 0; i < responses.length; i++) {
timestamps.push(responses[i].getTimestamp().setMilliseconds(0));
urls.push(responses[i].getEditResponseUrl());
}
for (var j = 1; j < data.length; j++) {
resultUrls.push([data[j][0]?urls[timestamps.indexOf(data[j][0].setMilliseconds(0))]:'']);
}
sheet.getRange(2, urlCol + 1, resultUrls.length).setValues(resultUrls);
}
发送电子邮件时,电子表格不包含该网址。是否有更改会导致assignEditURLs函数在其他脚本完成之前不保存电子表格中的URL?是否添加了一些内容,我需要在代码中包含以添加此内容?我希望电子邮件能在表格提交后的几分钟内发出。
正如我所说,这在其他电子表格中有效。对代码进行的唯一更改是使用正确的列和文件。数据最终显示在工作表中,但直到发送电子邮件后才会显示。
此致
卡尔
答案 0 :(得分:0)
在我保留的一些脚本中,我注意到转换到新工作表时,工作表ID会发生变化。如果您还没有,请尝试使用新ID更新REGISTRATION_SHEET变量。