谷歌应用脚本类型错误:无法调用未定义的方法“子字符串”

google apps script TypeError: Cannot call method "substring" of undefined

本文关键字:方法 字符串 子字符串 未定义 调用 类型 脚本 应用 错误 谷歌      更新时间:2023-09-26

我有一个谷歌表单,提交时调用一个包含javascript .substring(start,finish)方法的"表单提交"函数。 奇怪的是,在我的测试代码中它工作正常,但是当它实际上必须使用"提交时"代码实现时,我收到一个错误,说:类型错误: 无法调用未定义的方法"子字符串"。(第 26 行,文件"代码")

这是我的测试代码,它工作正常(调用浏览器.msgBox)

function test()
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];  //assumes that sheet containing header columns is first sheet
  var lastRow = sheet.getLastRow();
  var lastColumn = sheet.getLastColumn();
  var values = SpreadsheetApp.getActiveSheet().getRange(1, 1, 1, lastColumn).getValues();
  //variables with form submit data would go here but not for this testing

  var dataDump = "'n'n"
  var headerValue = values[0][5];
  var headerValue5 = headerValue.substring(0,5);
  Browser.msgBox(headerValue5);
}

此代码生成错误...

function onFormSubmit(e) 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];  //assumes that sheet containing header columns is first sheet
  var lastRow = sheet.getLastRow();
  var lastColumn = sheet.getLastColumn();
  var values = SpreadsheetApp.getActiveSheet().getRange(1, 1, 1, lastColumn).getValues();
  //define variables
  var timeStamp = e.values[0];
  var name = e.values[1];
  var email = e.values[2];
  var emailSubject = "QMG periodic wRVU responses for ";
  emailSubject = emailSubject + timeStamp;
  var dataDump = "'n'n";
  for (var i = 3; i <= e.values.length; i++)
  {
    var headerValue = values[0][i];
    var responseValue = e.values[i];
    var responseValue5 = responseValue.substring(0,5);  //error here !!!!!!
    i++;  //increment i to get detailsValue
    var detailsValue = e.values[i];
      dataDump = dataDump + headerValue;
      dataDump = dataDump + ":'n'n";
      dataDump = dataDump + responseValue;
      dataDump = dataDump + "'n";
      dataDump = dataDump + detailsValue;
      dataDump = dataDump + "'n'n*********************'n'n";
  }
  MailApp.sendEmail(email, emailSubject, dataDump);  
}

删除带有注释"//error here !!!!!"的行工作正常,所以我知道它正在正常读取数组数据。 计划是使用 .substring() 来确定一些格式,所以希望让它工作。

提前感谢...

这里本身没有专业人士,但我想我对问题是什么有一种预感。

var array = ["aaa", "bbb", "ccc"];
for (var i = 0; i <= array.length; i++) {
    console.log(array[i]);
}

看看运行上面的代码时,我会得到一个控制台.log最后用undefined
,由于i <= array.length.

undefined上运行字符串方法(如 .substring)会引发错误。

<=更改为<,您应该很高兴。