如何使用Google Apps脚本从每个键值中提取值?

发布于 2025-01-30 03:01:16 字数 2811 浏览 4 评论 0原文

我经常从银行收到有关针对不同资金的买卖的电子邮件,我想从电子邮件正文中提取基金价值,并每天将其粘贴到我的Google表中,以分析其起伏。

到现在为止,我所实现的目标是将电子邮件主体提取为纯文本,并以赞美和正则表达方式尝试,但仅实现了价值。

以下是我的代码。

function NBPFundUpdate(){
  
  // SKIP TO OUT OF OFFICE HOURS AND DAYS
    var nowH=new Date().getHours();
    var nowD=new Date().getDay();
    //Logger.log(nowD);
    //Logger.log('day : '+nowD+'   Hours : '+nowH)
    if (nowH>19||nowH<8||nowD==0) { return }
    //if (nowH>17||nowH<8||nowD==6||nowD==0) { return }

  var sourceSpreadsheet = SpreadsheetApp.getActive();
  var sourceSheet = sourceSpreadsheet.getActiveSheet();
  
    // START OPERATION
  var Gmail = GmailApp;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var MasterSheet = ss.getSheetByName("Master");
  var index = 2;
  var aa = 0;
  var na = 0;

  // SEARCH EMAIL
  var query = 'from: [email protected], subject: NBP FUNDS NAV';
  var threadsNew = Gmail.search(query);
  Logger.log(threadsNew.length);

  //check if thread found or not
  if (threadsNew.length ==0) { return }

  var lastscantime = threadsNew[0].getLastMessageDate();
  var master = ss.getSheetByName("Master");
  master.getRange("Z1").setValue(lastscantime);
  Logger.log(lastscantime);

  //loop all emails
  for(var n in threadsNew){
    var thdNew  = threadsNew[n]; 
    var msgsNew = thdNew.getMessages(); 
    var msgNew = msgsNew[msgsNew.length-1];
  // GET ATTACHMENT
    var bodyNew = msgNew.getBody();
    var plainbody  = msgNew.getPlainBody();
    var subject = msgNew.getSubject();
    var Etime = msgNew.getDate();

    Logger.log(Etime);
    Logger.log(subject);
    Logger.log(plainbody);
    
    var NGSLFbuying = /NBP GOVERNMENT SECURITIES LIQUID FUND\n(.*?)$/gm.exec(plainbody);
    Logger.log(NGSLFbuying);

    var NGSLFSelling = /NBP GOVERNMENT SECURITIES LIQUID FUND\n(.*?)$/gm.exec(plainbody);
    Logger.log(NGSLFSelling);
    
  }
}

logger.log(plainbody)的结果;在下面。

logger.log(ngslfbuying)的结果; null请参见下图屏幕截图

”在此处输入图像描述”

供您参考,我希望最终结果在我的Google电子表格中看起来像这样。

如果某种习惯帮助我实现这一目标,则应非常感谢他 /她。

I am regularly getting emails from the bank regarding Rates of buying and selling against different funds, I want to extract the fund values from the email body and paste them into my google sheets on daily basis to analyze their ups and downs.

Till now what I achieve is extracted the email body as plain text and tried with praise and regex but failed to achieve only values.

below is my Code.

function NBPFundUpdate(){
  
  // SKIP TO OUT OF OFFICE HOURS AND DAYS
    var nowH=new Date().getHours();
    var nowD=new Date().getDay();
    //Logger.log(nowD);
    //Logger.log('day : '+nowD+'   Hours : '+nowH)
    if (nowH>19||nowH<8||nowD==0) { return }
    //if (nowH>17||nowH<8||nowD==6||nowD==0) { return }

  var sourceSpreadsheet = SpreadsheetApp.getActive();
  var sourceSheet = sourceSpreadsheet.getActiveSheet();
  
    // START OPERATION
  var Gmail = GmailApp;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var MasterSheet = ss.getSheetByName("Master");
  var index = 2;
  var aa = 0;
  var na = 0;

  // SEARCH EMAIL
  var query = 'from: [email protected], subject: NBP FUNDS NAV';
  var threadsNew = Gmail.search(query);
  Logger.log(threadsNew.length);

  //check if thread found or not
  if (threadsNew.length ==0) { return }

  var lastscantime = threadsNew[0].getLastMessageDate();
  var master = ss.getSheetByName("Master");
  master.getRange("Z1").setValue(lastscantime);
  Logger.log(lastscantime);

  //loop all emails
  for(var n in threadsNew){
    var thdNew  = threadsNew[n]; 
    var msgsNew = thdNew.getMessages(); 
    var msgNew = msgsNew[msgsNew.length-1];
  // GET ATTACHMENT
    var bodyNew = msgNew.getBody();
    var plainbody  = msgNew.getPlainBody();
    var subject = msgNew.getSubject();
    var Etime = msgNew.getDate();

    Logger.log(Etime);
    Logger.log(subject);
    Logger.log(plainbody);
    
    var NGSLFbuying = /NBP GOVERNMENT SECURITIES LIQUID FUND\n(.*?)$/gm.exec(plainbody);
    Logger.log(NGSLFbuying);

    var NGSLFSelling = /NBP GOVERNMENT SECURITIES LIQUID FUND\n(.*?)$/gm.exec(plainbody);
    Logger.log(NGSLFSelling);
    
  }
}

The Result of Logger.log(plainbody); is below.

enter image description here

result of Logger.log(NGSLFbuying); is null see below image Screenshot

enter image description here

For your reference, I want the final result should look like this in my google spreadsheet;

enter image description here

If somebuddy help me to achive this, shall be very thankfull to him / her.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

メ斷腸人バ 2025-02-06 03:01:16

您正在使用\ n,但价格之前没有销售折扣。

const plainbody = `something before
NBP GOVERNMENT SECURITIES LIQUID FUND 1 2
something after`;

const [line, buy, sell] = /NBP GOVERNMENT SECURITIES LIQUID FUND (.*?) (.*?)$/gm.exec(plainbody);
console.log(line);
console.log(buy);
console.log(sell);

You are using \n but there is no line break before the prices.

const plainbody = `something before
NBP GOVERNMENT SECURITIES LIQUID FUND 1 2
something after`;

const [line, buy, sell] = /NBP GOVERNMENT SECURITIES LIQUID FUND (.*?) (.*?)$/gm.exec(plainbody);
console.log(line);
console.log(buy);
console.log(sell);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文