代码未及时应用工作表编辑

时间:2015-06-02 19:32:57

标签: google-apps-script google-sheets google-docs-api

我在电子表格中有代码,触发器在表单提交时运行它。该代码应首先创建一个链接,以允许编辑提交的表单数据。它在较旧的工作表中运行良好,但在我最近的迭代中,它没有在继续之前保存链接。

这是代码的开头,它是触发器中列出的函数:

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?是否添加了一些内容,我需要在代码中包含以添加此内容?我希望电子邮件能在表格提交后的几分钟内发出。

正如我所说,这在其他电子表格中有效。对代码进行的唯一更改是使用正确的列和文件。数据最终显示在工作表中,但直到发送电子邮件后才会显示。

  • REGISTRATION_FORM_ID =表单文件的ID
  • REGISTRATION_SHEETNAME =接收数据的工作表名称
  • REGISTRATION_LINK_COL = REGISTRATION_SHEETNAME中用于放置数据的列号
  • REGISTRATION_SHEET =接收数据的工作表文件的ID

此致

卡尔

1 个答案:

答案 0 :(得分:0)

在我保留的一些脚本中,我注意到转换到新工作表时,工作表ID会发生变化。如果您还没有,请尝试使用新ID更新REGISTRATION_SHEET变量。