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

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

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

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

Q&A

解決済

1回答

128閲覧

Gmailからスプレッドシートへメール本文を反映させる

mykgiaugg_.

総合スコア3

Google Apps Script

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

0グッド

1クリップ

投稿2024/05/08 03:45

編集2024/05/08 04:11

実現したいこと

gmailで受信したあるラベルで分けているメールをスプレッドシートへ反映したいです。
日付、宛先、送信元等をセルごとに分け、本文の内容を反映させるたいと思っています。
その中で、メール本文が「====」で始まるものがエラーとなってしまいます。

発生している問題・分からないこと

getPlainBodyにてメール本文を取得することはできたのですが、受信したメール本文が「====」で始まるものに関して、スプレッドシート上では「数式の解析エラーです。」と表示されてしまいセル上で反映されません。
おそらくイコールから始まることによって演算子扱いされてしまっているのかと思われるのですが、検索してもこれといった解決方法がなく、困っております。

恐れ入りますが、どなたか解決方法をご教示いただけますでしょうか。

該当のソースコード

function exportGmails() { var book = SpreadsheetApp.openById(''); var criteria = 'label:フロント宛'; var threads = GmailApp.search(criteria); var sheet = book.getActiveSheet(); sheet.getRange(1, 1).setValue('日付'); sheet.getRange(1, 2).setValue('宛先'); sheet.getRange(1, 3).setValue('送信元'); sheet.getRange(1, 4).setValue('件名'); sheet.getRange(1, 5).setValue('本文'); for (var i = 0; i < threads.length; i++) { messages = threads[i].getMessages(); message = messages[0]; console.log(message.getFrom()); rowNumber = i + 2; sheet.getRange(rowNumber, 1).setValue(message.getDate()); sheet.getRange(rowNumber, 2).setValue(message.getTo()); sheet.getRange(rowNumber, 3).setValue(message.getFrom()); sheet.getRange(rowNumber, 4).setValue(message.getSubject()); sheet.getRange(rowNumber, 5).setValue(message.getPlainBody()); } }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

indexOf等ためしたものの、うまく処理されず、、、
他に解決策があればご教示願いたいです。

補足

特になし

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

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

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

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

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

YAmaGNZ

2024/05/08 04:05

先頭文字が’=’の場合に'(シングルコーテーション)を追加してはどうでしょうか。 先頭文字がシングルコーテーションの場合もシングルコーテーションを追加したほうがいいでしょう。
mykgiaugg_.

2024/05/08 05:27

コメントありがとうございます。 シングルコーテーションの追加が良いとのことでしたが、どこに追加すべきでしょうか...? 勉強不足でお恥ずかしいのですが、なにか参考となるようなコードがあればご教示いただけますと幸いです。
YAmaGNZ

2024/05/08 05:36

setValueでセットする前に各値を変数に入れて、チェックした結果をsetValueすればよろしいかと思います。 let work = message.getPlainBody(); if (work.startsWith("=") || work.startsWith("'")) { work = "'" + work; } sheet.getRange(rowNumber, 5).setValue(work); といった感じでどうですかね
mykgiaugg_.

2024/05/08 06:00

コメントありがとうございます! 教えていただいたコードを試したところ、正しく本文が表示されました! ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
guest

回答1

0

ベストアンサー

セルに記載する時に先頭にシングルコーテーションを入れると表示されます。
なのでスクリプトのほうでも

javascript

1let work = message.getPlainBody(); 2if (work.startsWith("=") || work.startsWith("'")) 3{ 4 work = "'" + work; 5} 6sheet.getRange(rowNumber, 5).setValue(work);

といった感じで先頭の文字が=もしくはシングルコーテーションの場合は先頭にシングルコーテーションを追加する処理を行ってやればいいのではないでしょうか。

この処理は本文だけではなくタイトル等でも同じことを行ったほうがいいとは思います。
なのでこの処理を関数化してしまうのも手だとは思います。

投稿2024/05/08 06:12

YAmaGNZ

総合スコア10294

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

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

mykgiaugg_.

2024/05/08 06:24

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問