🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

1回答

888閲覧

GASでGmailの内容取得: 一つのメール内にある複数の同種情報(例: 「金額: 200円 金額: 400円」などの情報)を両方取得するには

rgw

総合スコア1

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2021/01/25 08:46

編集2021/01/26 02:12

イメージ説明

前提・実現したいこと

GAS初心者です。Google App Scriptを使ってGmailから情報を抜き出し、抜き出したものをスプレッドシートに記録したいと思っています。金融機関から受信したメールの内容を抜き出したいのですが、一つのメール内に、 金融機関 楽天銀行 入金日 2020年12月14日 入金額 1,775円 金融機関 楽天銀行 入金日 2020年12月07日 入金額 2,000円 といった形で、同種の情報(入金日、入金額など)が複数入っています。 これをすべて抜き出すにはどうしたら良いでしょうか。

発生している問題・エラーメッセージ

一つのメールから同種の情報を複数抜き出すことができない。↓のvar date2の処理が失敗しました。

該当のソースコード

function MoneyForward() { var condition = 'subject:【Money Forward ME】入金のお知らせ; var start = 0; var max = 500; var threads = GmailApp.search(condition, start, max); var messages = GmailApp.getMessagesForThreads(threads); var body = messages[0][0].getBody(); var date1 = body.split('入金日</td><td style="border:1px solid #eeeeee;padding:10px;text-align:left;">')[1].split('</td></tr><tr><td width="100" bgcolor="#f9f6f0" style="font-weight: bold;border:1px solid #eeeeee;padding:10px;text-align:left;">入金額</td><td style="border:1px solid #eeeeee;padding:10px;text-align:left;">')[0]; var amount1 = body.split('入金額</td><td style="border:1px solid #eeeeee;padding:10px;text-align:left;">')[1].split('</td></tr></table>')[0]; var date2 = body.split('円</td></tr></table><table width="500" style="font-size:1.1em;border:1px solid #eeeeee;border-collapse:collapse;margin-bottom:10px;"><tr><td width="100" bgcolor="#f9f6f0" style="font-weight: bold;border:1px solid #eeeeee;padding:10px;text-align:left;">金融機関</td><td style="border:1px solid #eeeeee;padding:10px;text-align:left;">楽天銀行</td></tr><tr><td width="100" bgcolor="#f9f6f0" style="font-weight: bold;border:1px solid #eeeeee;padding:10px;text-align:left;">入金日</td><td style="border:1px solid #eeeeee;padding:10px;text-align:left;">')[1].split('</td></tr><tr><td width="100" bgcolor="#f9f6f0" style="font-weight: bold;border:1px solid #eeeeee;padding:10px;text-align:left;">入金額</td><td style="border:1px solid #eeeeee;padding:10px;text-align:left;">')[0];

試したこと

splitを使って、入金日や入金額の前後で区切り、情報を抜き出そうと試みました。
ですが、最初の情報(上の例だと、12月14日と1,775円)のみしか抜き出せませんでした。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroshi0240

2021/01/26 01:04

bodyの具体的なテキスト情報を例示された方が回答が得られやすいと思いますよ。推察するにHTML形式でtableタグで書かれた情報のように読み取れますが、前提として不変な部分とそうでない部分がわからないとどのような方法が良いかは提案しづらいです。
rgw

2021/01/26 01:51

hiroshi0240さん コメントありがとうございます!なるほど、です。 初心者ゆえに、どういう情報を出すと良いのか理解できていなかったので、助かりました。スクショを載せます。
guest

回答1

0

HTML形式であればライブラリ「perser」を使うことで比較的簡単にデータ抽出できますよ。
例えば
var data = Parser.data(body).from('<table>').to('</table>').iterate();
とすれば、各テーブルタグの内側のテキストを配列として格納出来ます。
あとは
for(var i = 0;i<data.length;i++){
}
の中でそれぞれお好きに成型されてはいかがでしょうか?

投稿2021/01/26 02:55

hiroshi0240

総合スコア640

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rgw

2021/01/26 03:03

ご回答いただきありがとうございます! Parserは先日、Webの情報を抽出する際に初めて使用したところでした。 なるほど、Gmailの情報もParserで抽出できるのですね。 一度やってみます。大変助かりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問