質問編集履歴
3
文法の修正、
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,8 +2,101 @@
|
|
2
2
|
|
3
3
|
テイクアウト注文メールが自動転記される、スプレッドシート予約表を作りたいです。
|
4
4
|
|
5
|
+
▼注文メール
|
6
|
+

|
7
|
+
|
8
|
+
▼理想のスプレッドシート
|
9
|
+

|
10
|
+
|
5
11
|
### 困っていること
|
6
12
|
|
13
|
+
G列の、商品名を正確に取得することができません。
|
14
|
+
|
15
|
+
###試したこと
|
16
|
+
|
17
|
+
①matchを使用したら、
|
18
|
+
1つ目の商品名しか取得できませんでした。
|
19
|
+

|
20
|
+
|
21
|
+
②ご教示いただいたmatchALLをそのまま貼り付けたら、
|
22
|
+
やり方が悪いのか、エラーが出ました。
|
23
|
+
|
24
|
+
③本屋さんで見つけた、splitを使用したら、
|
25
|
+
なぜか2文字目の一文字しか取得できませんでした。
|
26
|
+

|
27
|
+
|
28
|
+
|
29
|
+
###実際のコード
|
30
|
+
②splitを使用したコードを記載します。
|
31
|
+
|
32
|
+
```Google Apps Script
|
33
|
+
function myFunction() {
|
34
|
+
// 検索条件に該当するスレッド一覧を取得
|
35
|
+
var threads = GmailApp.search('subject: 新規注文番号 -label:転記済');
|
36
|
+
|
37
|
+
// スレッドを一つずつ取り出す
|
38
|
+
threads.forEach(function(thread) {
|
39
|
+
// スレッド内のメール一覧を取得
|
40
|
+
var messages = thread.getMessages();
|
41
|
+
|
42
|
+
// メールを一つずつ取り出す
|
43
|
+
messages.forEach(function(message) {
|
44
|
+
// メール本文を取得
|
45
|
+
var plainBody = message.getPlainBody();
|
46
|
+
|
47
|
+
// 来店場所を取り出す
|
48
|
+
var basyo = plainBody.match(/来店地を選ぶ↓:(.*)/);
|
49
|
+
|
50
|
+
// 来店日付を取り出す
|
51
|
+
var hiduke = plainBody.match(/来店日を選ぶ↓(.*)/);
|
52
|
+
|
53
|
+
// 来店時間を取り出す
|
54
|
+
var jikan = plainBody.match(/来店時間を選ぶ↓(.*)/);
|
55
|
+
|
56
|
+
// 番号を取り出す
|
57
|
+
var bangou = plainBody.match(/新しい注文:#(.*)/);
|
58
|
+
|
59
|
+
// 氏名を取り出す
|
60
|
+
var shimei = plainBody.match(/(.*)様/);
|
61
|
+
|
62
|
+
// 合計を取り出す
|
63
|
+
var goukei = plainBody.match(/合計金額:(.*)/);
|
64
|
+
|
65
|
+
// 商品名を取り出す
|
66
|
+
var syohin = plainBody.split('】')[1]
|
67
|
+
.split('==========')[0];
|
68
|
+
|
69
|
+
|
70
|
+
// 書き込むシートを取得
|
71
|
+
var sheet = SpreadsheetApp.getActive().getSheetByName('自動予約表2');
|
72
|
+
|
73
|
+
// 最終行を取得
|
74
|
+
var lastRow = sheet.getLastRow() + 1;
|
75
|
+
|
76
|
+
// セルを取得して値を転記
|
77
|
+
sheet.getRange(lastRow, 1).setValue(basyo[1]);
|
78
|
+
sheet.getRange(lastRow, 2).setValue(hiduke[1]);
|
79
|
+
sheet.getRange(lastRow, 3).setValue(jikan[1]);
|
80
|
+
sheet.getRange(lastRow, 4).setValue(bangou[1]);
|
81
|
+
sheet.getRange(lastRow, 5).setValue(shimei[1]);
|
82
|
+
sheet.getRange(lastRow, 6).setValue(goukei[1]);
|
83
|
+
sheet.getRange(lastRow, 7).setValue(syohin[1]);
|
84
|
+
});
|
85
|
+
|
86
|
+
// スレッドに転記済ラベルを付ける
|
87
|
+
var label = GmailApp.getUserLabelByName('転記済');
|
88
|
+
thread.addLabel(label);
|
89
|
+
});
|
90
|
+
}
|
91
|
+
```
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
###以下は、過去の質問ログです。
|
98
|
+
(papinianusさんが、以下の質問に対応したコードを回答くださっており、どなたかの参考になるかもしれないので、念のためログとして残しております)
|
99
|
+
|
7
100
|
注文メールの中身が、1種類だけの時は処理できるのですが、2種類以上の商品だと、2種類目以降が取得されません。
|
8
101
|
|
9
102
|
注文メール↓
|
@@ -73,5 +166,4 @@
|
|
73
166
|
thread.addLabel(label);
|
74
167
|
});
|
75
168
|
}
|
76
|
-
```
|
169
|
+
```
|
77
|
-
参考になるスレッドが見つからず困っています。お力添えいただければ幸いです。
|
2
タイトルに繰り返しというキーワードを追加
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
【GAS】
|
1
|
+
【GAS】メール本文内で、複数回出現する特定の文字列以降を、繰り返しスプレッドシートに転記
|
body
CHANGED
File without changes
|
1
タイトル・本文をわかりやすく変更しました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
Gmailの特定の文字列以降(複数回出現)を
|
1
|
+
【GAS】Gmailの特定の文字列以降(複数回出現)を順番にスプレッドシートに転記
|
body
CHANGED
@@ -12,36 +12,7 @@
|
|
12
12
|
実際の予約表↓
|
13
13
|

|
14
14
|
|
15
|
-
### 試したこと
|
16
|
-
注文メールのテンプレート上、
|
17
15
|
|
18
|
-
商品名の先頭には、必ず
|
19
|
-
> 】
|
20
|
-
|
21
|
-
個数の先頭には、必ず
|
22
|
-
> X
|
23
|
-
|
24
|
-
オプション有無の先頭には、
|
25
|
-
> オプション↓:
|
26
|
-
|
27
|
-
という文字が含まれるので、この文字を探して、この文字より後ろの文字を取得することで、スプレッドシートに転記しようとしていたのですが、
|
28
|
-
|
29
|
-
2種類以上の注文が入った時、すなわち
|
30
|
-
> 】
|
31
|
-
> X
|
32
|
-
> オプション↓:
|
33
|
-
|
34
|
-
が、メール本文内に、2回以上でてきた場合、
|
35
|
-
|
36
|
-
出現2回目以降も、
|
37
|
-
①商品名を、スプレッドシートに順番に(J列、M列・・・と)転記
|
38
|
-
②個数も、①に紐付いて、順番に(K列、N列・・・と)転記
|
39
|
-
③オプションも、①に紐付いて、順番に(L列、O列・・・と)転記
|
40
|
-
|
41
|
-
と、していくには、どうしたらいいか、わかりません。
|
42
|
-
|
43
|
-
ネット検索で、みようみまねで書いたコード?が、以下です。
|
44
|
-
|
45
16
|
### 該当のソースコード
|
46
17
|
|
47
18
|
```ここに言語名を入力
|
@@ -103,7 +74,4 @@
|
|
103
74
|
});
|
104
75
|
}
|
105
76
|
```
|
106
|
-
おそらく、同じ文字が出てきても、その時点で処理を終わらせず、転記後、また前回の続き(n+1番目?)の同じ文字を探し続ける、みたいな処理が必要なのでは、と想像していますが、行き詰まっております。
|
107
|
-
|
108
|
-
|
109
|
-
|
77
|
+
参考になるスレッドが見つからず困っています。お力添えいただければ幸いです。
|