質問編集履歴

2

問題が一つ解決したためもう一つのみの質問題名、および解決していない問題点のみの質問内容へと記載を変更しました

2021/10/22 15:59

投稿

mixa3328
mixa3328

スコア0

test CHANGED
@@ -1 +1 @@
1
- gasを利用しgmail本文の一部をスプレッドシートに書き込む方法について
1
+ gasを利用しgmail本文の文字列(繰り返し)すべてスプレッドシートに抽出する方法
test CHANGED
@@ -60,132 +60,122 @@
60
60
 
61
61
  とあった場合、**上の26日の支払い分しかスプレッドシートに抽出できない**
62
62
 
63
+
64
+
65
+
66
+
67
+ ### 該当のソースコード
68
+
69
+
70
+
71
+ ```googleappsscript
72
+
73
+ function getPayments() {
74
+
75
+ // メール検索クエリを作成
76
+
77
+ const SUBJECT = 'お支払金額のお知らせ'; // 利用お知らせメールの件名
78
+
79
+ const SUBJECT2 = 'ご指定金額到達のお知らせ';
80
+
81
+ const ADDRESS = 'statement@vpass.ne.jp'; // お知らせメールの送信元
82
+
83
+ const LABEL_NAME = '読み込み済み'; // ラベル名
84
+
85
+ const LABEL_NAME2 = 'カード利用明細メール';
86
+
87
+ const QUERY = '-subject:' + SUBJECT + '-subject:'+ SUBJECT2 + ' from:' + ADDRESS + ' -label:' + LABEL_NAME + ' label:' + LABEL_NAME2 ;
88
+
89
+
90
+
91
+ // メールを検索
92
+
93
+ var threads = GmailApp.search(QUERY);
94
+
95
+
96
+
97
+ // 該当メールがあった場合
98
+
99
+ if(threads.length > 0) {
100
+
101
+ const KEYWDS = ['利用日:', '利用先:', '利用金額:', '利用取引:'];
102
+
103
+ const LABEL = GmailApp.getUserLabelByName(LABEL_NAME);
104
+
105
+
106
+
107
+ var msgs = GmailApp.getMessagesForThreads(threads);
108
+
109
+ var sheet = SpreadsheetApp.getActiveSheet();
110
+
111
+
112
+
113
+ for(i=0; i<msgs.length; i++){
114
+
115
+ // 本文を取得
116
+
117
+ Body = msgs[i][0].getBody();
118
+
119
+ if(Body.match(/利用先:.*/)){
120
+
121
+
122
+
123
+
124
+
125
+ sheet.appendRow([
126
+
127
+ Body.match(/利用日:.*/g)[0].replace(KEYWDS[0], ''),
128
+
129
+ Body.match(/利用先:.*/)[0].replace(KEYWDS[1], ''),
130
+
131
+ Body.match(/利用金額:[\d,]+/)[0].replace(KEYWDS[2], ''),
132
+
63
- また、
133
+ ]);
134
+
64
-
135
+ }else{
136
+
65
-
137
+ sheet.appendRow([
138
+
139
+ Body.match(/利用日:.*/g)[0].replace(KEYWDS[0], ''),
140
+
141
+ Body.match(/利用取引:.*/)[0].replace(KEYWDS[3], ''),
142
+
143
+ Body.match(/利用金額:[\d,]+/)[0].replace(KEYWDS[2], ''),
144
+
145
+ ]);
146
+
147
+ }
148
+
149
+ // 処理の完了後、ラベルを付与
150
+
151
+ threads[i].addLabel(LABEL);
152
+
153
+ };
154
+
155
+
156
+
157
+ // 料金列に通貨表示を適用
158
+
159
+ amounts = sheet.getRange('B:B');
160
+
161
+ setCurrencyLayout(amounts);
162
+
163
+ }
164
+
165
+ }
166
+
167
+
168
+
169
+ // 選択セルを通貨表示にフォーマット
170
+
171
+ function setCurrencyLayout(range) {
172
+
173
+ range.setNumberFormat('[$¥-411]#,##0');
174
+
175
+ }
66
176
 
67
177
  ```
68
178
 
69
-  ○○様
70
-
71
-
72
-
73
- いつもカードをご利用頂きありがとうございます。
74
-
75
- お客様のカードご利用明細の内容をお知らせいたします。
76
-
77
-
78
-
79
- ご利用カード:○○
80
-
81
-
82
-
83
- ◇利用日:2021/10/26
84
-
85
- ◇利用取引:買物
86
-
87
- ◇利用金額:990円
88
-
89
-
90
-
91
- ```
92
-
93
- とあった場合、**「利用先」の文面がないためエラーが発生し止まる**
94
-
95
-
96
-
97
- ### 該当のソースコード
98
-
99
-
100
-
101
- ```googleappsscript
102
-
103
- function getPayments() {
104
-
105
- // メール検索クエリを作成
106
-
107
- const SUBJECT = 'お支払金額のお知らせ'; // 利用お知らせメールの件名
108
-
109
- const SUBJECT2 = 'ご指定金額到達のお知らせ';
110
-
111
- const ADDRESS = 'statement@vpass.ne.jp'; // お知らせメールの送信元
112
-
113
- const LABEL_NAME = '読み込み済み'; // ラベル名
114
-
115
- const LABEL_NAME2 = 'カード利用明細メール';
116
-
117
- const QUERY = '-subject:' + SUBJECT + '-subject:'+ SUBJECT2 + ' from:' + ADDRESS + ' -label:' + LABEL_NAME + ' label:' + LABEL_NAME2 ;
118
-
119
-
120
-
121
- // メールを検索
122
-
123
- threads = GmailApp.search(QUERY);
124
-
125
-
126
-
127
- // 該当メールがあった場合
128
-
129
- if(threads.length > 0) {
130
-
131
- const KEYWDS = ['利用日:', '利用先:', '利用金額:'];
132
-
133
- const LABEL = GmailApp.getUserLabelByName(LABEL_NAME);
134
-
135
-
136
-
137
- msgs = GmailApp.getMessagesForThreads(threads);
138
-
139
- sheet = SpreadsheetApp.getActiveSheet();
140
-
141
-
142
-
143
- for(i=0; i<msgs.length; i++){
144
-
145
- // 本文を取得
146
-
147
- Body = msgs[i][0].getBody();
148
-
149
- sheet.appendRow([
150
-
151
- Body.match(/利用日:.*/)[0].replace(KEYWDS[0], ''),
152
-
153
- Body.match(/利用先:.*/)[0].replace(KEYWDS[1], ''),
154
-
155
- Body.match(/利用金額:[\d,]+/)[0].replace(KEYWDS[2], ''),
156
-
157
- ]);
158
-
159
- // 処理の完了後、ラベルを付与
160
-
161
- threads[i].addLabel(LABEL);
162
-
163
- };
164
-
165
-
166
-
167
- // 料金列に通貨表示を適用
168
-
169
- amounts = sheet.getRange('B:B');
170
-
171
- setCurrencyLayout(amounts);
172
-
173
- }
174
-
175
- }
176
-
177
-
178
-
179
- // 選択セルを通貨表示にフォーマット
180
-
181
- function setCurrencyLayout(range) {
182
-
183
- range.setNumberFormat('[$¥-411]#,##0');
184
-
185
- }
186
-
187
- ```
188
-
189
179
 
190
180
 
191
181
  ### 回答に求めたいこと
@@ -196,15 +186,15 @@
196
186
 
197
187
 
198
188
 
199
- **二個ある決済記録を両方スプレッドシートに書き込む**
189
+ **二個ある決済記録を両方別々にスプレッドシートに書き込む**
200
-
201
-
202
-
203
- **「利用先」の文面がないときは空白で続きの作業を行ってほしい**
190
+
204
-
205
-
206
-
191
+
192
+
193
+
194
+
195
+
196
+
207
- この点です。
197
+ この1点です。
208
198
 
209
199
 
210
200
 
@@ -216,7 +206,7 @@
216
206
 
217
207
 
218
208
 
219
- 元のソースコードは
209
+ 改変元のソースコードは
220
210
 
221
211
  こちらの
222
212
 

1

ジャンル変更

2021/10/22 15:59

投稿

mixa3328
mixa3328

スコア0

test CHANGED
File without changes
test CHANGED
File without changes