質問編集履歴

3

文法の修正、

2022/01/10 11:11

投稿

cardamon
cardamon

スコア19

test CHANGED
File without changes
test CHANGED
@@ -6,10 +6,196 @@
6
6
 
7
7
 
8
8
 
9
+ ▼注文メール
10
+
11
+ ![イメージ説明](c04cd761ea06261856745a93d128eb64.png)
12
+
13
+
14
+
15
+ ▼理想のスプレッドシート
16
+
17
+ ![![イメージ説明](7509f55fb598ae984e0c30e2667f84af.png)
18
+
19
+
20
+
9
21
  ### 困っていること
10
22
 
11
23
 
12
24
 
25
+ G列の、商品名を正確に取得することができません。
26
+
27
+
28
+
29
+ ###試したこと
30
+
31
+
32
+
33
+ ①matchを使用したら、
34
+
35
+ 1つ目の商品名しか取得できませんでした。
36
+
37
+ ![イメージ説明](686acf32bfd6a6450d7fa456dcdd65e4.png)
38
+
39
+
40
+
41
+ ②ご教示いただいたmatchALLをそのまま貼り付けたら、
42
+
43
+ やり方が悪いのか、エラーが出ました。
44
+
45
+
46
+
47
+ ③本屋さんで見つけた、splitを使用したら、
48
+
49
+ なぜか2文字目の一文字しか取得できませんでした。
50
+
51
+ ![イメージ説明](dbcac210d6b55fe99b07a70d86c472a5.png)
52
+
53
+
54
+
55
+
56
+
57
+ ###実際のコード
58
+
59
+ ②splitを使用したコードを記載します。
60
+
61
+
62
+
63
+ ```Google Apps Script
64
+
65
+ function myFunction() {
66
+
67
+ // 検索条件に該当するスレッド一覧を取得
68
+
69
+ var threads = GmailApp.search('subject: 新規注文番号 -label:転記済');
70
+
71
+
72
+
73
+ // スレッドを一つずつ取り出す
74
+
75
+ threads.forEach(function(thread) {
76
+
77
+ // スレッド内のメール一覧を取得
78
+
79
+ var messages = thread.getMessages();
80
+
81
+
82
+
83
+ // メールを一つずつ取り出す
84
+
85
+ messages.forEach(function(message) {
86
+
87
+ // メール本文を取得
88
+
89
+ var plainBody = message.getPlainBody();
90
+
91
+
92
+
93
+ // 来店場所を取り出す
94
+
95
+ var basyo = plainBody.match(/来店地を選ぶ↓:(.*)/);
96
+
97
+
98
+
99
+ // 来店日付を取り出す
100
+
101
+ var hiduke = plainBody.match(/来店日を選ぶ↓(.*)/);
102
+
103
+
104
+
105
+ // 来店時間を取り出す
106
+
107
+ var jikan = plainBody.match(/来店時間を選ぶ↓(.*)/);
108
+
109
+
110
+
111
+ // 番号を取り出す
112
+
113
+ var bangou = plainBody.match(/新しい注文:#(.*)/);
114
+
115
+
116
+
117
+ // 氏名を取り出す
118
+
119
+ var shimei = plainBody.match(/(.*)様/);
120
+
121
+
122
+
123
+ // 合計を取り出す
124
+
125
+ var goukei = plainBody.match(/合計金額:(.*)/);
126
+
127
+
128
+
129
+ // 商品名を取り出す
130
+
131
+ var syohin = plainBody.split('】')[1]
132
+
133
+ .split('==========')[0];
134
+
135
+
136
+
137
+
138
+
139
+ // 書き込むシートを取得
140
+
141
+ var sheet = SpreadsheetApp.getActive().getSheetByName('自動予約表2');
142
+
143
+
144
+
145
+ // 最終行を取得
146
+
147
+ var lastRow = sheet.getLastRow() + 1;
148
+
149
+
150
+
151
+ // セルを取得して値を転記
152
+
153
+ sheet.getRange(lastRow, 1).setValue(basyo[1]);
154
+
155
+ sheet.getRange(lastRow, 2).setValue(hiduke[1]);
156
+
157
+ sheet.getRange(lastRow, 3).setValue(jikan[1]);
158
+
159
+ sheet.getRange(lastRow, 4).setValue(bangou[1]);
160
+
161
+ sheet.getRange(lastRow, 5).setValue(shimei[1]);
162
+
163
+ sheet.getRange(lastRow, 6).setValue(goukei[1]);
164
+
165
+ sheet.getRange(lastRow, 7).setValue(syohin[1]);
166
+
167
+ });
168
+
169
+
170
+
171
+ // スレッドに転記済ラベルを付ける
172
+
173
+ var label = GmailApp.getUserLabelByName('転記済');
174
+
175
+ thread.addLabel(label);
176
+
177
+ });
178
+
179
+ }
180
+
181
+ ```
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+ ###以下は、過去の質問ログです。
194
+
195
+ (papinianusさんが、以下の質問に対応したコードを回答くださっており、どなたかの参考になるかもしれないので、念のためログとして残しております)
196
+
197
+
198
+
13
199
  注文メールの中身が、1種類だけの時は処理できるのですが、2種類以上の商品だと、2種類目以降が取得されません。
14
200
 
15
201
 
@@ -149,5 +335,3 @@
149
335
  }
150
336
 
151
337
  ```
152
-
153
- 参考になるスレッドが見つからず困っています。お力添えいただければ幸いです。

2

タイトルに繰り返しというキーワードを追加

2022/01/10 11:11

投稿

cardamon
cardamon

スコア19

test CHANGED
@@ -1 +1 @@
1
- 【GAS】Gmailの特定の文字列以降(複数回出現)順番にスプレッドシートに転記
1
+ 【GAS】メール本文内で、複数回出現する特定の文字列以降を、繰り返しスプレッドシートに転記
test CHANGED
File without changes

1

タイトル・本文をわかりやすく変更しました。

2021/12/28 03:23

投稿

cardamon
cardamon

スコア19

test CHANGED
@@ -1 +1 @@
1
- Gmailの特定の文字列以降(複数回出現)を順番にスプレッドシートに転記したい
1
+ GAS】Gmailの特定の文字列以降(複数回出現)を順番にスプレッドシートに転記
test CHANGED
@@ -25,64 +25,6 @@
25
25
  ![イメージ説明](a2f9e12a55b156642305b6de55eff419.png)
26
26
 
27
27
 
28
-
29
- ### 試したこと
30
-
31
- 注文メールのテンプレート上、
32
-
33
-
34
-
35
- 商品名の先頭には、必ず
36
-
37
- > 】
38
-
39
-
40
-
41
- 個数の先頭には、必ず
42
-
43
- > X
44
-
45
-
46
-
47
- オプション有無の先頭には、
48
-
49
- > オプション↓:
50
-
51
-
52
-
53
- という文字が含まれるので、この文字を探して、この文字より後ろの文字を取得することで、スプレッドシートに転記しようとしていたのですが、
54
-
55
-
56
-
57
- 2種類以上の注文が入った時、すなわち
58
-
59
- > 】
60
-
61
- > X
62
-
63
- > オプション↓:
64
-
65
-
66
-
67
- が、メール本文内に、2回以上でてきた場合、
68
-
69
-
70
-
71
- 出現2回目以降も、
72
-
73
- ①商品名を、スプレッドシートに順番に(J列、M列・・・と)転記
74
-
75
- ②個数も、①に紐付いて、順番に(K列、N列・・・と)転記
76
-
77
- ③オプションも、①に紐付いて、順番に(L列、O列・・・と)転記
78
-
79
-
80
-
81
- と、していくには、どうしたらいいか、わかりません。
82
-
83
-
84
-
85
- ネット検索で、みようみまねで書いたコード?が、以下です。
86
28
 
87
29
 
88
30
 
@@ -208,10 +150,4 @@
208
150
 
209
151
  ```
210
152
 
211
- おそらく、同じ文字が出てきても、その時点で処理を終わらせず、転記後、また前回の続き(n+1番目?)の同じ文字を探し続ける、みたいな処理が必要なのでは、と想像していますが、行き詰まっております。
212
-
213
-
214
-
215
-
216
-
217
- この場所を、お店のお客さん教えてもらって、はじめて質問させてただきます。もし質問の仕方で、要領を得な点や、過不足、過不足、不適切な部分があれば、ご指摘・ご指導もいただければ幸いです。
153
+ 参考なるスレッドが見つかず困っています。お力添えいただければ幸いです。