问题
.findIndex()正在中断。我正在为它提供一个字符串,但它的意思是“这不是一个函数”
目标/背景
自动回复物业查询
函数执行以下操作:
扫描收件箱以识别查询。
分解电子邮件,将数据存储在变量中。
扫描电子表格,其中包含有关我们所有待售房屋的信息。将电子邮件中的属性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();
}
});
}
电子邮件示例
附加信息:错误显示它正在将propertyID作为字符串传递给.findIndex。
columnValues
ofvar columnValues = SS.getRange(2, column, SS.getLastRow()).getValues()
是二维数组,例如[["sample1"],["sample2"],["sample3"],,,]
。和的参数findIndex
是一个函数。我认为你的问题的原因是由于此。searchResult
使用的值检索索引时identityNumber
,请进行如下修改。var searchResult = columnValues.findIndex(identityNumber);
至
var searchResult = columnValues.findIndex(([r]) => r == identityNumber);
根据你的情况,当使用TextFinder时,还可以按以下方式修改脚本。
从
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();