![](/img/trans.png)
[英]Extracting data from gmail into a spreadsheet using Google Apps scripts
[英]Extracting numbers from Gmail messages using Google Apps Script
我正在嘗試使用Google Apps腳本從我的Gmail郵件中提取下面列出的數字。
2,495.00
1,594
3,777.23
642.00
這是代碼:
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var threads = GmailApp.search('subject:(Transaction) after:2016/7/31 before:2016/8/10');
for (var i=0; i<threads.length; i++)
{
var messages = threads[i].getMessages();
var tmp;
for (var j=0; j<messages.length; j++)
{
var content = messages[j].getBody();
var subject = messages[j].getSubject();
var date = messages[j].getDate();
Logger.log(content);
if (content)
{
tmp = content.match(/\d+(,\d+)*(\.\d+(e\d+)?)?/);
var number = (tmp && tmp[j]) ? tmp[j] : 'No number';
sheet.appendRow([number, subject, date]);
}
else
{
sheet.appendRow([content, subject, date]);
}
}
}
}
我得到的結果好壞參半。 對於某些消息,這可以按預期工作,但對於某些消息,則完全跳過消息中的數字。 我是JS / GAS的新手,我認為問題出在正則表達式中,但我不確定。 任何幫助,將不勝感激。
您在這里面臨兩個麻煩:
您正在使用的正則表達式看起來沒有經過優化(但是您所尋找的內容也不是很清楚,如果您還要查看看起來像642.00
數字,則不應找到類似1,594
數字)。 不過,您可以使用諸如Shekhar Khairnar在評論中建議的正則表達式或類似的東西(末尾的g
很重要,因為您的郵件中有多個數字)。
第二個麻煩是在行var number = (tmp && tmp[j]) ? tmp[j] : 'No number';
var number = (tmp && tmp[j]) ? tmp[j] : 'No number';
。 為什么在此行中有一個j
var? j
引用了for循環->消息的數量,與消息中的出現無關。
我可以向您建議的是這樣的:
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var threads = GmailApp.search('test');
var re = /(?:\d{1,3}[,])*\d{1,3}\.{0,1}\d{1,3}/g;
for (var i=0; i<threads.length && i<5; i++) // added a condition because I didn't wanted to have too many results
{
var messages = threads[i].getMessages();
var tmp;
for (var j=0; j<messages.length; j++)
{
var content = messages[j].getPlainBody(); //.getBody();
var subject = messages[j].getSubject();
var date = messages[j].getDate();
//Logger.log(content);
if (content)
{
tmp = content.match(re); // /\d+(,\d+)*(\.\d+(e\d+)?)?/);
var number = tmp || ['No number']; // result of tmp is either null or an array --> if it's null then it will take the value 'no number'
Logger.log(number);
sheet.appendRow([number.join(" | "), subject, date]);
}
else
{
sheet.appendRow([content, subject, date]);
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.