0

希望这是一个相当直接的问题。首先,一些上下文信息:我从表格中收集信息到谷歌电子表格中,以记录自行车比赛的条目。我使用 onformsubmit 触发器运行一些代码来执行以下操作;1) 我按骑手等级检查我有多少条目,并将这些与一些预设限制进行比较 2) 根据预设限制,我计算出骑手的条目是“临时输入”还是“候补名单”(我打电话给这个 EntryType 例如 EntryType = 'waitlisted') 3) 我填充了一些变量,以便发送确认电子邮件,引用用户提交的条目详细信息并告知他们他们的条目是否在候补名单中。

除了上面第 4 步的一个小问题外,该代码运行良好。大多数情况下,这可以正常工作,但如果条目靠得很近 - 例如相隔几秒钟 - 步骤 4 可能会留空。确认电子邮件将发送,表单数据将写入电子表格,只是“EntryType”不会与表单数据一起写入电子表格。

我怀疑来自下一条记录的表单中的数据优先,并且写入功能失败而没有错误?只是一个猜测。

有人可以提供一些建议吗?我相信这段代码非常接近,不幸的是还不是防弹的。

问候,科林

function onFormSubmit(e) {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var oGradeSubmitted = e.values[13];
var oGradeLevelSubmitted =   e.values[14];

// Get the Type of Entry Limits to Apply (Handicap, Scratch or None)  
var oRangeLT  = ss.getRangeByName("oLimitType");
var oLimitType = oRangeLT.getValue();


//== start ===G R A D E    L I M I T =================================================================================    



  if (oLimitType == 'Scratch') { 

   // Concatenate Generic Range Name & Grade Submitted to get Specific Ranges Names   
  var oLimitVar = "oLimit" + oGradeSubmitted;  //These are now the LOWER waitlist limits
  var oLimitUpper = "oLimitUpper" + oGradeSubmitted;  //These are the UPPER waitlist limits
  var oCountVar = "oCount" + oGradeSubmitted; //The count is based on grade submitted, not handicapping grade so as to not upset waitlist order

  // Get Data from Specific Ranges
  // 1) Grade Limit Data

    //lower waitlist limits
    var oRangeLV = ss.getRangeByName(oLimitVar);
    var oLimitData = oRangeLV.getValues();

    //upper waitlist limits
    var oRangeLVU = ss.getRangeByName(oLimitUpper);
    var oLimitDataUpper = oRangeLVU.getValues();


  // 2) Grade Count Data
  var oRangeCV = ss.getRangeByName(oCountVar);
  var oCountData = oRangeCV.getValues();  



  // Write some Data into the same row as the current form submission data  
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses");
  var row =  sheet.getLastRow();


  if (+oCountData >= +oLimitData && +oCountData <= +oLimitDataUpper) {
    sheet.getRange(row,18).setValue("Waitlisted");
    var oEntryStatus = "Waitlisted"; 
  } else {};

      if (+oCountData > +oLimitDataUpper) {
    sheet.getRange(row,18).setValue("Waitlisted but doubtful");
    var oEntryStatus = "Waitlisted but doubtful";  
    } else {};

    }
    }
4

1 回答 1

1

要解决并发问题,您可以使用传递的 e.range 参数而不是 getLastRow():

var row = e.range.getRow();

https://developers.google.com/apps-script/understanding_events(滚动到底部)

于 2013-05-07T05:27:20.887 回答