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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

4866閲覧

[GAS] プロパティを読み取れません エラー

kzpnz920

総合スコア1

Google Apps Script

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/09/01 10:43

編集2020/09/01 16:04

前提・実現したいこと

日時: xx
位置情報: xx
読み取り内容: xx
という内容のGoogleメールから毎回3つの項目を抽出しスプレッドシートに追加したい

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

objSheet.getRange(lastRow,2).setValue(location[1]); の部分にて
TypeError: null からプロパティ「1」を読み取れません。(行 43、ファイル「コード」)
というエラーが出てしまいます。

該当のソースコード

var SearchString = "Subject:読み取り用"; function myFunction() { var myThreads = GmailApp.search(SearchString, 0, 1); var myMsgs = GmailApp.getMessagesForThreads(myThreads); for ( var threadIndex = 0 ; threadIndex < myThreads.length ; threadIndex++ ) { var mailBody = myMsgs[threadIndex][0].getPlainBody(); var date = mailBody.match(/日時: (.*)/); var location = mailBody.match(/位置情報: (.*)/); var text = mailBody.match(/読み取り内容: (.*)/); var objSpreadSheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/12na8KZ22j1dyQzGE2W85cGlWxVBmjWphFyyVFftKl-o/edit#gid=0"); var objSheet = objSpreadSheet.getSheetByName("読み取り結果"); var lastRow = objSheet.getLastRow() + 1; objSheet.getRange(lastRow,1).setValue(date[1]); objSheet.getRange(lastRow,2).setValue(location[1]); objSheet.getRange(lastRow,3).setValue(text[1]); } }

試したこと

・シートの取得方法を下記のやり方で試してみる
inputsheet = SpreadsheetApp.openById('シートURL');
inputSheetname = inputsheet.getSheetByName("シート名");
・V8をオフにする
など。しかし結果は同じでした…

補足情報(FW/ツールのバージョンなど)

当方勉強を始めたばかりの初心者なもので、自分だけではどうにもならず困り果てています。
コメントいただけると大変助かります。どうぞよろしくお願い致します。

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

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

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

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

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

Daregada

2020/09/01 15:48

そのスプレッドシートに「読み取り結果」という名前のシートがありますか?
kzpnz920

2020/09/01 15:59

確認不足で大変お恥ずかしいのですが、シート名がシート1のままでした。ありがとうございます。 しかし、修正すると今度は objSheet.getRange(lastRow,2).setValue(location[1]); の行にて、TypeError: null からプロパティ「1」を読み取れません。(行 43、ファイル「コード」) というエラーが出てきてしまいました。 甘えてしまい申し訳ないのですが、こちらも可能でしたらご意見いただけないでしょうか。 よろしくお願い致します。
guest

回答1

0

ベストアンサー

最初に書かれていた質問のエラーメッセージは、objSheetがnullになっているためなので、原因としては、

GAS

1var objSheet = objSpreadSheet.getSheetByName("読み取り結果");

で「読み取り結果」シートの取得に失敗していること。確認した結果、シート名が初期設定の「シート1」のままだったことが判明し、「読み取り結果」に名前を変更することで解決した。

修正された質問のエラーメッセージは、locationがnullになっているためなので、原因としては、

GAS

1var location = mailBody.match(/位置情報: (.*)/);

で、メール内容の「位置情報: xxx」の取得に失敗していることが原因。location[1]は、取得した文字列の「位置情報: 」より後のxxxの部分(行末まで)に相当するため、locationがnullでは取得できないのは当然。

根本的な解決法は、読み取っているメールの内容に「位置情報: 」で始まる部分があるか確認すること。漢字はもちろん、「:」(半角コロン)や「 」(半角空白)も一致していないと取得に失敗する。

次善の策は、「日時: xxx」、「位置情報: yyy」、「読み取り内容: zzz」それぞれの取得に失敗した場合に、date,location,textを使わないこと。例えば、次のようにすればいい。

GAS

1 if (date !== null) { 2 objSheet.getRange(lastRow,1).setValue(date[1]); 3 } 4 if (location !== null) { 5 objSheet.getRange(lastRow,2).setValue(location[1]); 6 } 7 if (text !== null) { 8 objSheet.getRange(lastRow,3).setValue(text[1]); 9 }

投稿2020/09/02 00:18

Daregada

総合スコア11990

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

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

kzpnz920

2020/09/02 00:34 編集

Daregada様 教えていただいた内容で、修正後の問題も無事解決できました。 大変勉強になりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問