【发布时间】:2021-09-26 01:47:06
【问题描述】:
目标:提取 gmail 并使用 RegEx 解析特定数据并将该数据放入单行
问题:不是将数据添加到单行,而是添加到多行。 getGmail 函数本身正确地将所有内容放在一行中,但是一旦我使用 extractDetails 函数运行 getGmail 函数,它就不再将数据放在一行中。下面是电子表格中脚本结果的截图
function onOpen() {
const ui = SpreadsheetApp.getUi();
const menu = ui.createMenu('Gmail');
menu.addItem('Get Gmail', 'getGmail')
menu.addToUi();
}
function getGmail(){
var label = GmailApp.getUserLabelByName("Billing");
var threads = label.getThreads();
for (var i = threads.length - 1; i >=0; i--){
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++){
var message = messages[j];
extractDetails(message);
GmailApp.markMessageRead(message);
}
threads[i].removeLabel(label);
}
}
function extractDetails(message){
var emailData = {
date: "Null",
sender: "Null",
subject: "Null",
body: "Null",
recipient: "Null",
amount: "Null",
fee: "Null",
total: "Null"
}
var emailKeywords = {
recipient: "Recipient:*",
amount: "Amount Sent",
fee: "Fee",
total: "Total Amount Charged*"
}
emailData.date = message.getDate();
emailData.sender = message.getFrom();
emailData.subject = message.getSubject();
emailData.body = message.getPlainBody();
var regExp;
regExp = new RegExp("(?<=" + emailKeywords.recipient + ").*");
emailData.recipient = emailData.body.match(regExp).toString().trim();
regExp = new RegExp("(?<=" + emailKeywords.amount +").*[0-9]*\.[0-9]+[0-9]+");
emailData.recipient = emailData.body.match(regExp).toString().trim();
regExp = new RegExp("(?<=" + emailKeywords.fee + ").*[0-9]*\.[0-9]+[0-9]+");
emailData.fee = emailData.body.match(regExp).toString().trim();
var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var emailDataArr = [];
for(var propName in emailData){
emailDataArr.push(emailData[propName]);
activeSheet.appendRow(emailDataArr);
}
}
【问题讨论】:
标签: javascript regex parsing google-apps-script gmail-api