Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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 Apps Script_Google Sheets_Google Forms - Fatal编程技术网

Google apps script 在每次提交新的谷歌表单时存储并增加一个值

Google apps script 在每次提交新的谷歌表单时存储并增加一个值,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,当客户填写表单时,我希望创建一个新的票号并通过电子邮件发送 第一个错误: 无法从未定义中读取属性“范围”(第9行,文件“代码”) 然后,在第11、13和21行,我有一些代码来控制票证计数器在每次提交表单时生成唯一的票证号。当我在系统中运行2个测试表单时,票证号没有填充,计数器变量也没有更改 function onFormSubmit(e) { var activateSheet = SpreadsheetApp.getActiveSpreadsheet(); SpreadsheetA

当客户填写表单时,我希望创建一个新的票号并通过电子邮件发送

第一个错误:

无法从未定义中读取属性“范围”(第9行,文件“代码”)

然后,在第11、13和21行,我有一些代码来控制票证计数器在每次提交表单时生成唯一的票证号。当我在系统中运行2个测试表单时,票证号没有填充,计数器变量也没有更改

function onFormSubmit(e) {

  var activateSheet = SpreadsheetApp.getActiveSpreadsheet();

  SpreadsheetApp.setActiveSheet(activateSheet.getSheetByName('Form Responses 1'));

  var sheet = SpreadsheetApp.getActiveSheet();

  var row = e.range.getRowIndex(); *** line 9***

  var ticketCounter = 100; ***line 11***

  var ticketNumber = "FCB" + ticketCounter; ***line 13***

  var etrolControlsServiceEmail = "controls-service@etrol.net";

  var timestamp = sheet.getRange(row, 1).getValues();

  var ticketNumberLocation = sheet.getRange(row, 2);

  ticketNumberLocation.setValue(ticketNumber); ***line 21***

  var location = sheet.getRange(row, 3).getValues();

  var reportedBy = sheet.getRange(row, 4).getValues();

  var customerEmailAddress = sheet.getRange(row, 5).getValues();

  var priority = sheet.getRange(row, 6).getValues();

  var customerIssue = sheet.getRange(row, 7).getValues();

  var subject =  "An issue has been reported at " + location + " " + timestamp + " " + "Ticket Number " + ticketNumber;

  var emailBody = "To: Envirotrol Controls Service Department " + "\nRE: Issue reported at " + location + "." + "\n\nAn issue has been reported  at " + location + ". Please see the details below:" + "\n\nTicket Number: " + ticketNumber + "\nLocation: " + location + "\nReported By: " + reportedBy + "\nPriority Level: " + priority + "\nIssue: " + customerIssue;

  MailApp.sendEmail(customerEmailAddress + ", " + etrolControlsServiceEmail, subject, emailBody);

  ticketCounter += 1};

此代码显示了存储、检索和增加电子表格文档属性中的
ticketCounter
值的策略

function onFormSubmit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet(),
      shFormResponses = ss.getSheetByName('Form Responses 1');

  ss.setActiveSheet(shFormResponses);

  var row = e.range.getRowIndex(),
      ticketCounter = PropertiesService
        .getDocumentProperties()
        .getProperty('ticketCounter');

  if (ticketCounter === undefined || ticketCounter === null) {
    PropertiesService.getDocumentProperties().setProperty('ticketCounter', '100');
    ticketCounter = '100';
  };

  var ticketNumber = "FCB" + ticketCounter,
      etrolControlsServiceEmail = "controls-service@etrol.net",
      timestamp = shFormResponses.getRange(row, 1).getValues(),
      ticketNumberLocation = shFormResponses.getRange(row, 2);

  ticketNumberLocation.setValue(ticketNumber);

  var location = shFormResponses.getRange(row, 3).getValues();
  var reportedBy = shFormResponses.getRange(row, 4).getValues();
  var customerEmailAddress = shFormResponses.getRange(row, 5).getValues();
  var priority = shFormResponses.getRange(row, 6).getValues();
  var customerIssue = shFormResponses.getRange(row, 7).getValues();
  var subject =  "An issue has been reported at " + location + " " + 
       timestamp + " " + "Ticket Number " + ticketNumber;
  var emailBody = "To: Envirotrol Controls Service Department " + 
      "\nRE: Issue reported at " + location + "." + 
      "\n\nAn issue has been reported  at " + location + 
      ". Please see the details below:" + "\n\nTicket Number: " + 
      ticketNumber + "\nLocation: " + location + "\nReported By: " + 
      reportedBy + "\nPriority Level: " + priority + "\nIssue: " + 
      customerIssue;

  MailApp.sendEmail(customerEmailAddress + ", " + etrolControlsServiceEmail, subject, emailBody);

  //Values are stored as text in the Properties Service
  var numberAsNumber = Number(ticketCounter);
  ticketCounter = (numberAsNumber + 1).toString(); 

  PropertiesService
    .getDocumentProperties()
    .setProperty('ticketCounter', ticketCounter);
};

如果通过从代码编辑器运行代码来测试代码,则
e
将是
未定义的
。为了使计数器变量
ticketCounter
在每次运行代码时都不同,您需要在电子表格中存储一个值,检索它,增加它,然后将新值写回spreadsheret以备下次代码运行时使用。应用程序脚本代码在代码完成后不会持久保存变量值。您还可以将最后一次递增的值保存到脚本的属性或电子表格的属性中。这与我们需要的功能非常接近。现在唯一的问题是票证号保持不变返回FCBnull。好消息是提交的内容正在填充票号字段并发送电子邮件。我们只需要有关空号问题的帮助。我添加了空值检查。我将
(ticketCounter==undefined)
更改为
(ticketCounter==undefined | | ticketCounter==null)
。查看它是否有效,并进行回复。如果有效,则将答案标记为正确,然后进行投票。当我进行更改时,它完全停止填充票号字段。难道你不喜欢计算机吗?我添加了一行代码来为变量指定默认值:
ticketCounter='100';
查看这是否有效差异。另外,查看视图、执行记录,并转到日志底部,查看脚本是否完成,如果没有,错误消息是什么。然后让我知道。我们越来越近了!数字现在已填充,但没有增加。我删除了ticketCounter的额外变量分配,但没有任何更改。来自ex的错误消息执行日志。“[16-01-14 12:41:30:476 PST]执行失败:引用错误:函数号(){[Number.Number的本机代码,arity=1]}不能用作赋值的左侧或++或--运算符的操作数。(第41行,文件“代码”)[0.694秒总运行时间]”