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

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

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

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

Q&A

解決済

1回答

811閲覧

GASを使用してGmailとスプレットシートを連携させたい

fumi_taka23

総合スコア15

Google Apps Script

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

0グッド

0クリップ

投稿2019/05/30 19:16

前提・実現したいこと

プログラミング初学者です。

現在、GASを使用して、自動でGmailのメールの内容をスプレットシートに転記するスクリプトを作成しています。

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

以下のURLのページにあるように、複数のメールの内容を二次元の配列に格納した後その配列の中身をスプレットシートに転記したいが、以下のようなエラーメッセージが出て実行できない https://tonari-it.com/gas-gmail-spreadsheet/ ```範囲の行数には 1 以上を指定してください。 ### 該当のソースコード ```gas ソースコード ```// スプレッドシートにメール内容を書き込む function mailToSheet () { // 書き込むシートURL var sheet_url = 'https://docs.google.com~~~~~~'; // 書き込むシート名 var sheet_name = 'シート1'; Logger.log("15行目まで正常 ") //メールを取得する // 日報という文字列を含むか     var strTerms = '/.*/ + 日報 + /.*/'; //条件にあった受信トレイの何個めまでのスレッドを取得する?0から100まで var mythreads = GmailApp.getInboxThreads(0, 100); var myMsgs = GmailApp.getMessagesForThreads(mythreads); var valMsgs = []; /* 各メールから日時、送信元、件名、内容を取り出す*/ for(var i = 0;i < myMsgs.length;i++){ valMsgs[i] = []; //送ってきた月を取得 //valMsgs[i][0] = myMsgs[i][0].getMonth(); valMsgs[i][0] = valMsgs[i][0] + 1 //送ってきた日を取得 valMsgs[i][1] = myMsgs[i][0].getDate(); //shop_nameに件名を格納する var Shop_name = myMsgs[i][0].getSubject(); //bodystrという場所に本文の内容を入れる bodystr = myMsgs[i][0].getBody(); var string = bodystr.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,''); var string = string.replace(/\D/g,','); var string = string.replace(/,+/g,','); var string = string.slice(1); var string = string.slice(0,-1); var words = string.split(','); valMsgs[i][2] = words[0];//総来店数 valMsgs[i][3] = words[1];//既存数 valMsgs[i][4] = words[2];//エリア外 //中略 valMsgs[i][101] = words[153]; /* スプレッドシートに出力 */ for(var i=0;i < myMsgs.length;i++){ SpreadsheetApp.getActiveSheet().getRange(2, 3, i, 102).setValues(valMsgs); } } ### 試したこと SpreadsheetApp.getActiveSheet().getRange(2, 3, i, 102).setValues(valMsgs) 下から3行めのこのコードのiの部分を1にして、該当するメールを1つにした場合は正常に動作しました。 そのため、エラーを吐いているのは以下のコードの場所のみだと思います。 for(var i=0;i < myMsgs.length;i++){ SpreadsheetApp.getActiveSheet().getRange(2, 3, i, 102).setValues(valMsgs); } ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

javascript

1for(var i=0;i < myMsgs.length;i++){ 2SpreadsheetApp.getActiveSheet().getRange(2, 3, i, 102).setValues(valMsgs); 3}

↑を↓

javascript

1SpreadsheetApp.getActiveSheet().getRange(2+j, 3, valMsgs.length, 102).setValues(valMsgs); 2j+=valMsgs.length;

あと、var valMsgs = [];の直後でvar j=0;を入れといてください。
月を取るとこがコメントアウトされてるのも外したほうがいい気がした

・変えたとこ
そこでループいらない
iの位置は行数で、これはvalMsgsの個数できまる。
開始行を繰り下げる必要があるので、2+jで表現

投稿2019/05/30 22:36

papinianus

総合スコア12705

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

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

papinianus

2019/05/30 22:39

未読とかタグとかで絞らないと同じメールが何度も取り込まれる気がします
fumi_taka23

2019/05/31 04:33

ありがとうございました!解決しました! そうですね!existence_checkとかを入れておきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問