質問編集履歴
3
文法の修正、
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
タイトルに繰り返しというキーワードを追加
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
【GAS】
|
1
|
+
【GAS】メール本文内で、複数回出現する特定の文字列以降を、繰り返しスプレッドシートに転記
|
test
CHANGED
File without changes
|
1
タイトル・本文をわかりやすく変更しました。
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
|
+
参考になるスレッドが見つからず困っています。お力添えいただければ幸いです。
|