.findIndex() - 字符串不是函数。谷歌应用脚​​本

Bja*_*aeg -1 javascript google-sheets google-apps-script

问题

.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();
  }
});
}
Run Code Online (Sandbox Code Playgroud)

电子邮件示例

在此输入图像描述

电子表格示例 在此输入图像描述

附加信息:错误显示它将 propertyID 作为字符串传递给 .findIndex

在此输入图像描述

Tan*_*ike 5

修改要点:

  • 在您的脚本中,columnValuesofvar columnValues = SS.getRange(2, column, SS.getLastRow()).getValues()是二维数组,如[["sample1"],["sample2"],["sample3"],,,]. 的参数findIndex是一个函数。我认为你的问题的原因就是这个。
  • searchResult当您想使用 的值检索索引时identityNumber,请修改如下。

修改后的脚本:

var searchResult = columnValues.findIndex(identityNumber);
Run Code Online (Sandbox Code Playgroud)
var searchResult = columnValues.findIndex(([r]) => r == identityNumber);
Run Code Online (Sandbox Code Playgroud)
  • 在您的脚本中,似乎检索了搜索行的“B”列。

笔记:

  • 在您的情况下,当使用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();
      
      Run Code Online (Sandbox Code Playgroud)
    •   var houseAddress = SS.getRange(2, column, SS.getLastRow()).createTextFinder(identityNumber).findNext().offset(0, 1).getValue();
      
      Run Code Online (Sandbox Code Playgroud)

参考: