Javascript .findIndex()-字符串不是函数。谷歌应用程序脚本
问题 .findIndex()正在中断。我给它提供了一个字符串,但它说“这不是一个函数” 目标/背景 自动回复物业查询 函数执行以下操作:Javascript .findIndex()-字符串不是函数。谷歌应用程序脚本,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,问题 .findIndex()正在中断。我给它提供了一个字符串,但它说“这不是一个函数” 目标/背景 自动回复物业查询 函数执行以下操作: 扫描收件箱以识别查询 分解电子邮件,将数据存储在 变量 扫描电子表格,其中包含有关我们所有业务的信息 待售房屋。将电子邮件中的属性ID与 正在寻找匹配项 使用存储在与该属性匹配的电子表格中的数据回复电子邮件 我在哪里 我能够识别电子邮件。 然后我就可以浏览电子邮件并提取相关信息 代码 function autoReply() { var quer
- 扫描收件箱以识别查询
- 分解电子邮件,将数据存储在 变量
- 扫描电子表格,其中包含有关我们所有业务的信息 待售房屋。将电子邮件中的属性ID与 正在寻找匹配项
- 使用存储在与该属性匹配的电子表格中的数据回复电子邮件
function autoReply() {
var queryInbox = "is:unread from:(example@gmail.com) to:(example@gmail.com) Example Text:"; // Email Identification
var locatedEmail = GmailApp.search(queryInbox); // Search Inbox for Identification
locatedEmail.forEach(thread => {
var messages = thread.getMessages();
if (messages.length === 1) {
// BREAKING DOWN THE EMAIL
var msgBody = messages[0].getPlainBody();
var identityNumber = msgBody.split("\n")[1].replace('Property ID: ','');
// SPREADSHEET
var SS = SpreadsheetApp.openById('exampleId').getSheetByName("Sheet1");
var column = 1; // column Index
var columnValues = SS.getRange(2, column, SS.getLastRow()).getValues(); //1st is header row
var searchResult = columnValues.findIndex(identityNumber); //Row Index - 2
var rowID = searchResult + 2;
var houseAddress = SS.getRange(rowID, 2).getValue();
// EMAIL BODY
var body = "<p>Hi, thank you for emailing us about " + houseAddress + ".</p>";
var options = { name: "Property Enquiry", htmlBody: body };
thread.reply(body, options);
thread.markRead();
thread.moveToArchive();
}
});
}
函数自动回复(){
var queryInbox=“is:未从以下位置读取:(example@gmail.com)致:(example@gmail.com)示例文本:“;//电子邮件标识
var locatedEmail=GmailApp.search(queryBox);//搜索收件箱中的标识
locatedEmail.forEach(线程=>{
var messages=thread.getMessages();
如果(messages.length==1){
//分解电子邮件
var msgBody=消息[0]。getPlainBody();
var identityNumber=msgBody.split(“\n”)[1]。替换('Property ID:','');
//电子表格
var SS=SpreadsheetApp.openById('exampleId').getSheetByName(“Sheet1”);
var column=1;//列索引
var columnValues=SS.getRange(2,column,SS.getLastRow()).getValues();//第一个是标题行
var searchResult=columnValues.findIndex(identityNumber);//行索引-2
var rowID=searchResult+2;
var houseAddress=SS.getRange(rowID,2.getValue();
//电子邮件正文
var body=“您好,感谢您通过电子邮件向我们发送有关“+houseAddress+””;
var options={name:“属性查询”,htmlBody:body};
回复(正文,选项);
thread.markRead();
thread.moveToArchive();
}
});
}
示例电子邮件
电子表格示例
其他信息:错误显示它正在将propertyID作为字符串传递给.findIndex
修改点:
- 在脚本中,
var columnValues=SS.getRange(2,column,SS.getLastRow()).getValues()的
是二维数组,类似于columnValues
[[“sample1”]、[“sample2”]、[“sample3”]、][code>。
的参数是一个函数。我认为你的问题就是因为这个findIndex
- 当您想使用
的值检索identityNumber
的索引时,请进行如下修改searchResult
- 在脚本中,似乎检索到了搜索行的列“B”
- 在您的情况下,当使用时,您的脚本也可以按如下方式修改
- 从
var columnValues = SS.getRange(2, column, SS.getLastRow()).getValues(); //1st is header row var searchResult = columnValues.findIndex(identityNumber); //Row Index - 2 var rowID = searchResult + 2; var houseAddress = SS.getRange(rowID, 2).getValue();
- 到
var houseAddress = SS.getRange(2, column, SS.getLastRow()).createTextFinder(identityNumber).findNext().offset(0, 1).getValue();
- 从
console.log(columnValues)
你确定你有一个数组吗?我在主脚本之外设置了一个小的示例脚本来让它工作。单列仍然是一个二维数组,请尝试使用flat()
var columnValues = SS.getRange(2, column, SS.getLastRow()).getValues(); //1st is header row
var searchResult = columnValues.findIndex(identityNumber); //Row Index - 2
var rowID = searchResult + 2;
var houseAddress = SS.getRange(rowID, 2).getValue();
var houseAddress = SS.getRange(2, column, SS.getLastRow()).createTextFinder(identityNumber).findNext().offset(0, 1).getValue();