Я собрал скрипт Google Apps, чтобы извлечь некоторые данные из моих электронных писем и вставить их в электронную таблицу.Сценарий на самом деле работает отлично и вставляет данные нормально, но я продолжаю получать следующую ошибку в моем журнале:
TypeError: Cannot read property "1" from null. (line 46, file "Code")
Согласно MDN , *Метод 1008 * возвращает массив с «совпадающим текстом в качестве первого элемента, а затем по одному элементу для каждой совпадающей скобки захвата, содержащей текст, который был захвачен».Поскольку я хочу, чтобы значение в скобках моего регулярного выражения, а не весь сопоставленный текст, я использую [1]
.
Вот эта функция:
function getEmails() {
var label = GmailApp.getUserLabelByName("CapitalOne Transaction");
var threads = label.getThreads(); // Get threads of label above
for (var i in threads) {
var messages = threads[i].getMessages();
for (var j in messages) {
if ( messages[j].isUnread() ) {
var emailBody = messages[j].getPlainBody();
Logger.log("Email body: " + emailBody);
// Get account number
const regExpAcct = /Account ending in (\d{4})/g;
var message_account = regExpAcct.exec(emailBody);
if(message_account){ Logger.log("Email message accnt: " + message_account[1]); }
// Get date of transaction
var regExpDate = /we're notifying you that on (...+), at/g;
var message_date = regExpDate.exec(emailBody);
if(message_date){ Logger.log("Email message date: " + message_date[1]); }
// Get vendor name
var regExpVendor = /, at (...+),/g;
var message_vendor = regExpVendor.exec(emailBody);
if(message_vendor){ Logger.log("Email message vendor: " + message_vendor[1]); }
// Get transaction amount
const regExpAmount = /purchase in the amount of \$(\S+) was/g;
var message_amount = regExpAmount.exec(emailBody);
if(message_amount){ Logger.log("Email message amount: " + message_amount[1]); }
addDataToSpreadsheet( message_date[1], message_account[1], message_vendor[1], message_amount[1] );
messages[j].markRead();
}
}
}
}
Строка(46) это вопрос: addDataToSpreadsheet( message_date[1], message_account[1], message_vendor[1], message_amount[1] );
, который вызывает эту функцию:
function addDataToSpreadsheet( date, account, vendor, amount ) {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow( [date, account, vendor, amount] );
}
My Logger.log
s после каждого регулярного выражения все выводят переменные в порядке, и, как я сказалданные отлично вводятся в электронную таблицу с помощью указанной выше функции, но я все равно получаю сообщение об ошибке каждый раз, когда запускается функция getEmails()
.
Есть идеи, почему?