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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

Q&A

0回答

658閲覧

【GAS】Gmailからスプレッドシートに転記

rrrrrrrrrr21

総合スコア3

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

0グッド

1クリップ

投稿2023/01/23 08:04

編集2023/01/24 06:39

前提

https://blog.synnex.co.jp/google/gmail-gas/
上記サイトを参考に
Gmailからスプレッドシートへ転記させたいと思っています。

実現したいこと

抽出先シートのD列を作業列として利用したく、
A列~C列にGmaiのデータを抽出したいです。
イメージ説明

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

appendRowを使っているからなのか
D列に数式が入っているとうまく作動してくれません。
setValueでも同様です・・。

該当のソースコード

function searchMails() { const query = 'subject:〇〇 after:2023/1/1' const threads = GmailApp.search(query); const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName('リスト'); // リセット const howMany = sheet.getLastRow() - 1; const range = sheet.getRange("A2:C"); if(howMany > 0){ range.clearContent(); } threads.forEach(thread => { const message = thread.getMessages()[0]; //一通目のメールのみ let date = message.getDate(); // 送信日 let fromData = message.getFrom(); // 送信元 let subject = message.getSubject(); // 件名 let data = [date, fromData, subject]; sheet.appendRow(data); }); }; ### 試したこと setValueで試してみました。 threads.forEach(function(thread){ const message = thread.getMessages()[0]; //一通目のメールのみ let date = message.getDate(); // 送信日 let fromData = message.getFrom(); // 送信元 let subject = message.getSubject(); // 件名 const lastRow = sheet.getLastRow() + 1; sheet.getRange(lastRow,1).setValue(date); sheet.getRange(lastRow,2).setValue(fromData); sheet.getRange(lastRow,3).setValue(subject);

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

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

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

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

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

penguin520

2023/01/24 04:10

appendRowを使っているからなのだと思うなら、使わない書き方をすれば良いのでは???
rrrrrrrrrr21

2023/01/24 04:44

appendRowをつかわずやってみましたが作業列を追加すると動かなくなってしまいます。 threads.forEach(function(thread){ const message = thread.getMessages()[0]; //一通目のメールのみ let date = message.getDate(); // 送信日 let fromData = message.getFrom(); // 送信元 let subject = message.getSubject(); // 件名 const lastRow = sheet.getLastRow() + 1; sheet.getRange(lastRow,1).setValue(date); sheet.getRange(lastRow,2).setValue(fromData); sheet.getRange(lastRow,3).setValue(subject);
penguin520

2023/01/24 04:57

こちらで再現してみてもいいのですが、悩んでます 動かなくなるというのは、何行目で動かなくなりますか?どのように動いていないことを確認しました?
rrrrrrrrrr21

2023/01/24 05:03

リセットされた後、Gmailのデータが1件も書き出されなくなります。 なのでスクリプト実行後、スプレッドシートを見るとカラムだけしか残っていない状態です・・。
penguin520

2023/01/24 05:10

「リセット」というのは、何行目の処理でしょうか? 'リスト'の構造をサンプルで画像でアップロードしていただくことはできますか? 今日か、明日には、再現してみます。
rrrrrrrrrr21

2023/01/24 06:41

画像をアップロードいたしました。 リセットは const howMany = sheet.getLastRow() - 1; const range = sheet.getRange("A2:C"); if(howMany > 0){ range.clearContent(); } でA2:Cをクリアしております。 よろしくお願いいたします。
penguin520

2023/01/24 07:37

明日、時間あれば、対応させてもらいます。 他の方の回答があればそれはそれでよしとして。 宜しくお願いします。
rrrrrrrrrr21

2023/01/25 03:06

ありがとうございます。 何卒よろしくお願いいたします。
penguin520

2023/01/25 03:46

「D列に数式が入っていると」というのを図で表示していただくことはできますか?
rrrrrrrrrr21

2023/01/27 06:11

遅くなり申し訳ありません。 一旦、自力でなんとか解決できました。 ご丁寧に対応していただきありがとうございました。 // メール取得 threads.forEach(function(thread){ const message = thread.getMessages()[0]; // 一通目のメールのみ let date = message.getDate(); // 送信日 let fromData = message.getFrom(); // 送信元 let subject = message.getSubject(); // 件名 const lastRow = sheet.getRange("A:A").getValues().filter(String).length + 1; sheet.getRange(lastRow,1).setValue(date); sheet.getRange(lastRow,2).setValue(fromData); sheet.getRange(lastRow,3).setValue(subject); }); }; 上記で意図通り動いてくれます! ただこちらだと重く、二次元配列に変換する必要がありそうなので また勉強してきます・・。
penguin520

2023/01/30 05:19

解決してなによりです。あまりお役にたてなくてすいみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問