質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.44%
Google Apps Script

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

Q&A

解決済

1回答

1164閲覧

GAS Gmailからスプレッドシートへメールの項目ごとに抽出していきたいのですがうまく抽出できません。

diabolos826

総合スコア1

Google Apps Script

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

0グッド

0クリップ

投稿2023/02/16 11:12

実現したいこと

はじめまして。
当方知識が無いため色々調べ、コードを書いてみたのですが抽出できません。
どなたか知恵をお貸しいただけないでしょうか?

前提

以下のようなメールから、自動でスプレッドシートに項目ごとに抽出したいと思っております。

[フォームズ]------------------------------
ID:S000000 投稿がありました
[投稿日時] 2023年00月00日 10時00分00秒
お申込日 : 00月00日

■お名前
山田 一郎 様

■お名前(フリガナ)
ヤマダ イチロウ 様

■ご住所※全角25文字以内(半角不可)
[郵便番号] : 〒062-0000
[都道府県] : 北海道
[市区町村] : 札幌市○○区
[町名番地] : 美園○条○丁目○-○
[建物名] : ハイツ○○-101

■電話番号区分1
3.携帯

■連絡
3:夕方以降
======================

抽出したい情報は、
■お名前の一つ下の行の情報(様を抜きたい)
■お名前(フリガナ)の一つ下の行の情報(様を抜きたい)
■ご住所※全角25文字以内(半角不可)の
[郵便番号] : 以降の情報
[都道府県] : 以降の情報
[市区町村] : 以降の情報
[町名番地] :以降の情報
[建物名] : 以降の情報
■電話番号区分1の一つ下の行の情報
■連絡の一つ下の行の情報
を横並びにセルに抽出し自動で追加されていくようにしたいと考えております。

該当のソースコード

function searchContactMail() {

const title = 'subject:【フォームズ】';
// const start = 0;
// const max = 10;
const threads = GmailApp.search(title);
const messagesForThreads = GmailApp.getMessagesForThreads(threads);
const values = [];
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();

for(const messages of messagesForThreads){
const message = messages[0];
var plainBody = message.getPlainBody();
Logger.log(plainBody);
const record = [
message.getId(),
plainBody.match(/■お名前(.)/),
plainBody.match(/■お名前(フリガナ)(.
)/),
plainBody.match(/■ご住所※全角25文字以内(半角不可)(.)/),
plainBody.match(/[郵便番号] : (.
)/),
plainBody.match(/[都道府県] : (.)/),
plainBody.match(/[市区町村] : (.
)/),
plainBody.match(/[建物名] : (.)/),
plainBody.match(/電話番号区分1(.
)/),
plainBody.match(/■連絡(.*)/),

]; values.push(record); Logger.log(record);

}

if(values.length > 0){
sheet.getRange(lastRow + 1, 1, values.length, values[0].length).setValues(values);
}

  const label = GmailApp.getUserLabelByName('処理済み');
threads.forEach(thread => thread.addLabel(label));

}
======================

各項目の後の情報を抽出したいのですが、■がついた項目名しか抽出できません
お手数ですがどのようにGASのコードを書けばよいか
ご教授お願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

plainBody.match(/[都道府県] : (.*)/),

正規表現で [] は特別な機能があり、これは「 のどれか1文字の後に :」という意味になってます。この機能がいらないならエスケープしましょう。

plainBody.match(/\[都道府県\] : (.*)/),

投稿2023/02/16 23:28

int32_t

総合スコア21190

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

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

diabolos826

2023/02/17 13:39

ご回答ありがとうございます。[○○] :は抽出できるようになりました。 大変申し訳ないのですが、■○○の場合、ひとつ下の行の値を抽出するにはどうしたらよいでしょうか? ぜひともお力添えお願いいたします。
int32_t

2023/02/19 21:39

> ■○○の場合、ひとつ下の行の値を抽出 それは元の質問文にはない問題なので、別の質問を立ててください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問