回答編集履歴

2

 

2022/06/02 02:14

投稿

退会済みユーザー
test CHANGED
@@ -36,7 +36,7 @@
36
36
  + console.log('検索条件に合致するメールが見つかりませんでした。');
37
37
  + return;
38
38
  +}
39
- const label = GmailApp.getUserLabelByName('転記済');
39
+ const label = GmailApp.getUserLabelByName('転記済') ?? GmailApp.createLabel('転記済');
40
40
 
41
41
  const data = messages.map(message => {
42
42
  const body = message[0].getPlainBody();

1

 

2022/06/01 23:40

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,4 @@
1
+ # エラーの原因
1
2
  「TypeError: Cannot read property 'length' of undefined at tenkiMessage(splitコード:35:53)」というエラーは
2
3
  ```
3
4
  sheet.getRange(lastRow, 1, messages.length, data[0].length).setValues(data);
@@ -11,15 +12,17 @@
11
12
  //検索条件に該当するスレッド一覧を取得
12
13
  const messages = GmailApp.getMessagesForThreads(threads);
13
14
  ```
14
- の部分でメールを取得していますが、条件に合致するメールがない場合、messagesは空の配列になります。
15
+ の部分でメールを取得していますが、検索条件に合致するメールがない場合、messagesは空の配列([])になります。
15
16
 
16
- messagesが空の配列のとき、const data = messages.map(message => {}); の部分でdataも空の配列になります。
17
+ messagesが空の配列のとき、const data = messages.map(message => {}); の部分でdataも空の配列([])になります。
17
18
 
18
- 空の配列dataに対して、data[0] undefined となります。
19
+ 空の配列dataに対して、data[0] とすると、これは undefined となります。
19
- たがってdata[0].length を評価した時点で 'length' of undefined エラーがます。
20
+ してdata[0].length を評価した時点で 'length' of undefined エラーが発生します。
20
21
 
22
+ ---
21
23
 
24
+ # 解決案
22
- 対策として、条件に当てはまるmessageが存在しない場合は、returnして処理をスキップするようにします。
25
+ 対策として、検索条件に当てはまるメールが存在しない場合は、returnして処理をスキップするようにします。
23
26
  ```diff
24
27
  const tenkiMessage = () => {
25
28
  const condition = 'subject:(新規注文番号) -label:(転記済)';