teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

文法の修正、

2022/01/10 11:11

投稿

cardamon
cardamon

スコア19

title CHANGED
File without changes
body CHANGED
@@ -2,8 +2,101 @@
2
2
 
3
3
  テイクアウト注文メールが自動転記される、スプレッドシート予約表を作りたいです。
4
4
 
5
+ ▼注文メール
6
+ ![イメージ説明](c04cd761ea06261856745a93d128eb64.png)
7
+
8
+ ▼理想のスプレッドシート
9
+ ![![イメージ説明](7509f55fb598ae984e0c30e2667f84af.png)
10
+
5
11
  ### 困っていること
6
12
 
13
+ G列の、商品名を正確に取得することができません。
14
+
15
+ ###試したこと
16
+
17
+ ①matchを使用したら、
18
+ 1つ目の商品名しか取得できませんでした。
19
+ ![イメージ説明](686acf32bfd6a6450d7fa456dcdd65e4.png)
20
+
21
+ ②ご教示いただいたmatchALLをそのまま貼り付けたら、
22
+ やり方が悪いのか、エラーが出ました。
23
+
24
+ ③本屋さんで見つけた、splitを使用したら、
25
+ なぜか2文字目の一文字しか取得できませんでした。
26
+ ![イメージ説明](dbcac210d6b55fe99b07a70d86c472a5.png)
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

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

2022/01/10 11:11

投稿

cardamon
cardamon

スコア19

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

1

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

2021/12/28 03:23

投稿

cardamon
cardamon

スコア19

title CHANGED
@@ -1,1 +1,1 @@
1
- Gmailの特定の文字列以降(複数回出現)を順番にスプレッドシートに転記したい
1
+ 【GAS】Gmailの特定の文字列以降(複数回出現)を順番にスプレッドシートに転記
body CHANGED
@@ -12,36 +12,7 @@
12
12
  実際の予約表↓
13
13
  ![イメージ説明](a2f9e12a55b156642305b6de55eff419.png)
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
+ 参考なるスレッドが見つかず困っています。お力添えいただければ幸いです。