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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1347閲覧

GASでGメールから本文を切出した変数が配列になっている

YUKI_B

総合スコア77

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/10/19 02:42

編集2022/10/19 02:59

前提

GAS(Google apps script)で特定のラベルが付いたメールから情報を自動取得し、Spread sheetに転記したいと考えています。
メール本文から文字列を取得したところ特定の箇所において、
文字列ではなくて1文字だけが取得されました。
調べてみますと取得した箇所は何故か配列になっていました。

例:: 問い合わせ:こんにちは、私は~~■□■□■□■□■□(終わりの区切りの箇所)
ここの:右の部分(こんにちは~)の部分をsliceやsubstringで取得すると
str[0] = "問"
str[1] = "い"
str[2] = "合"
~~
と言った感じです。

実現したいこと

  • お問い合わせ内容を取得したい(お問い合わせ内容: ~~■□間)

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

該当箇所を取得すると”問”しか取得されない

該当のソースコード

google

1function sfsfs() { 2 3 // 抽出条件指定 4 let query = 'label:toitoi'; 5 6 // const sheet = SpreadsheetApp.getActive().getActiveSheet(); 7 8 //問合せごとの情報が要素になった二次元配列を取得 9 let gmail = getGmail(query); 10 11 // 書き込むシートを取得、アクティブシートを取得しているが任意のシートでOK 12 13 14 //要素ごとにappendRowメソッドを呼び出して最終行に書き込む繰り返し処理を実行 15 16 17 try { 18 gmail.forEach(info => sheet.appendRow(info)); 19 sheet.appendRow(info) 20 } catch (error) { 21 console.error(error); 22 Logger.log("終了です") 23 24 } 25} 26 27 28function getGmail(query) { 29 30 //Gmail取得ここから 31 //Gmailの履歴からマッチするメールを一覧化 32 let threads = GmailApp.search(query); 33 34 let gmailInfo = new Array(); 35 36 //一覧化したメールの件数分繰り返し ※このメールはシステムからの自動返信です 37 threads.forEach(function (thread) { 38 const sheet = SpreadsheetApp.getActive().getActiveSheet(); 39 let getvalueonearray = []; 40 41 // スレッド内のメール一覧を取得 42 let messages = thread.getMessages(); 43 44 // メールを一つずつ取り出す 45 messages.forEach(function (message) { 46 47 // メール本文 48 let plainBody = message.getPlainBody(); 49 // Logger.log(plainBody); 50 51 let mailcheck = plainBody.match(/資料請求がありました。(.*)/); 52 53 if (mailcheck) { 54 return; 55 } 56 57 // ▼会社名 58 let companyname = plainBody.match(/会社名: (.*)/); 59 // Logger.log(companyname); 60 61 // ▼送付先住所: 62 let address = plainBody.match(/ご住所: (.*)/); 63 // Logger.log(address); 64 65 // ▼連絡先TEL: 66 let telval = plainBody.match(/電話番号: (.*)/); 67 // Logger.log(telval); 68 69 // ▼メールアドレス: 70 let mail = plainBody.match(/メールアドレス: (.*)/); 71 // Logger.log(mail); 72 73 // ▼ふりがな: 74 let furigana = plainBody.match(/ふりがな: (.*)/); 75 // Logger.log(furigana); 76 77 // ▼氏名: 78 let name = plainBody.match(/氏名: (.*)/); 79 // Logger.log(companyname); 80 81 var question_text = new String; 82 // ▼お問い合わせ内容: 83 let question_text_start = plainBody.search(/お問い合わせ内容: (.*)/); 84 let question_text_end = plainBody.search(/■□■□(.*)/); 85 if (question_text_start) { 86 let q_text = plainBody.substring(question_text_start, question_text_end); 87 } 88 if (question_text_start == -1) { 89 question_text = ""; 90 } 91 // Logger.log("q_textはこれ" + "\n" + q_text) 92 Logger.log(plainBody) 93 Logger.log(question_text_start) 94 Logger.log(question_text_end) 95 Logger.log("☆★☆★☆★☆★☆★☆★" + "\n" + q_text) 96 97 let checkitemarray = [name, companyname, address, telval, mail, furigana, q_text]; 98 99 for (let i = 0; i < checkitemarray.length; i++) { 100 if (checkitemarray[i]) { 101 getvalueonearray.push(checkitemarray[i][1]); 102 } else { 103 getvalueonearray.push("") 104 } 105 } 106 Logger.log(getvalueonearray) 107 108 //各メール情報を組みとした二次元配列として格納 109 for (let i = 0; i < getvalueonearray.length; i++) { 110 gmailInfo.push(getvalueonearray[i]); 111 } 112 sheet.appendRow(gmailInfo); 113 gmailInfo = new Array; 114 }); 115 }); 116 // sheet.appendRow(gmailInfo) 117 118 return (gmailInfo); 119}

mail

1※このメールはシステムからの自動返信です 2 3お問い合わせがありました。 4 5━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6■お問い合わせいただいた会員情報 7━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8お問い合わせの種類: 案件相談について 9会社名: 株式会社鬼退治 10ご住所: 〒000-0000 11電話番号: 0120-234-567 12メールアドレス: tato_momo@gmail.com 13ご担当者名: 桃 太郎 14ふりがな: もも たろう 15お問い合わせ内容: お世話になります。 16株式会社鬼退治の桃です。 17 18支店開拓の件、 19内容について詳しくお伺いしたいです。 20 21ご確認宜しくお願い致します。 22 23■□■□■□■□■□■□■□■□■□■□■□ 24ハチ公フランチャイズ運営サイト 25東京運営事務局 連絡先 26 〒150-00000 27 東京都渋谷区道玄坂2−1−1 28 TEL: 03-8888-8888 / FAX: 03-8888-8889 29 E-Mail: info@hathikou.com 30■□■□■□■□■□■□■□■□■□■□■□

result

1(q_textの出力) 2☆★☆★☆★☆★☆★☆★ 3お問い合わせ内容: お世話になります。 4株式会社鬼退治の桃です。 5 6支店開拓の件、 7内容について詳しくお伺いしたいです。 8 9ご確認宜しくお願い致します。 10ーーーーーーーーーーーーーーーーーーーーーーーーーー 11(getvalueonearrayの出力) 12[, 株式会社鬼退治, 〒000-0000, 0120-234-567, tato_momo@gmail.com, , 問]

試したこと

var q_text_g = new String; for (let i = 0; i < q_text.length; i++) { q_text_g = q_text_g + q_text[i] }

forで配列の中身吸って別の変数に入れる → 失敗

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

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

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

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

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

guest

回答2

0

js

1 let checkitemarray = [name, companyname, address, telval, mail, furigana, q_text]; 2 3 for (let i = 0; i < checkitemarray.length; i++) { 4 if (checkitemarray[i]) { 5 getvalueonearray.push(checkitemarray[i][1]); 6 } else { 7 getvalueonearray.push("") 8 } 9 } 10 Logger.log(getvalueonearray)

q_text は配列ではなく文字列だと思います。このループ内で checkitemarray 内の q_text 以外は String.prototype.match() の戻り値なのでキャプチャした文字列を取るために push(checkitemarray[i][1]) しているのだと思いますが、q_textmatch() の戻り値ではないのでここで2文字目だけがpush() されています。

Array.isArray() で分岐してはどうでしょうか。

js

1let getvalueonearray = checkitemarray.map(item => { 2 if (Array.isArray(item)) 3 return item[1]; 4 if (item) 5 return item; 6 return ""; 7});

投稿2022/10/19 05:12

int32_t

総合スコア20856

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

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

YUKI_B

2022/10/19 05:59

回答いただきまことにありがとうございます。 寸分の差でそこに自ら気づきました。 私はここに至るまで半日無駄にしましたが、 この短期間でこの解法をいただけるのは大変ありがたいです。 また何かありましたらぜひともよろしくお願いいたします。
guest

0

自己解決

自己解決できました。
最期にpushで該当箇所を入れることでうまくいきました。

投稿2022/10/19 05:04

YUKI_B

総合スコア77

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問