質問編集履歴
5
ソースコード修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
//Googleスライドから修了書コピーを取得
|
28
28
|
|
29
|
-
var passdocID = '
|
29
|
+
var passdocID = '****ID';
|
30
30
|
|
31
31
|
var passdoc = SlidesApp.openById(passdocID);
|
32
32
|
|
@@ -90,7 +90,7 @@
|
|
90
90
|
|
91
91
|
//PDF修了書作成@修了書格納フォルダ
|
92
92
|
|
93
|
-
const folderID = '
|
93
|
+
const folderID = '****ID';
|
94
94
|
|
95
95
|
const folder = DriveApp.getFolderById(folderID); //フォルダIDでフォルダをGET
|
96
96
|
|
4
テストの結果(サーチパターンに1スペース加えてもマッチングしなかった)加わるのは不明なキャラ。リプレースされたPresentationには入っていない。
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
シェイプのGet text as Strings での値とSEARCH pattern が合致しない。
|
10
10
|
|
11
|
-
スライドのテキストシェイプに Get Text、 Set text で代入したストリングをGet text as Strings で取り出すと、ストリングの最後に
|
11
|
+
スライドのテキストシェイプに Get Text、 Set text で代入したストリングをGet text as Strings で取り出すと、ストリングの最後に不明なキャラ(スペースではない)ついてしまう。リプレースされたPresentationには入っていない。
|
12
12
|
|
13
13
|
|
14
14
|
|
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
//Googleスライドから修了書コピーを取得
|
28
28
|
|
29
|
-
var passdocID = '
|
29
|
+
var passdocID = '17O2uyEctnsd_OtehBO5PmFYi8pDHZwHf4nU9bOepnxw';
|
30
30
|
|
31
31
|
var passdoc = SlidesApp.openById(passdocID);
|
32
32
|
|
@@ -52,49 +52,51 @@
|
|
52
52
|
|
53
53
|
//開始-臨時:強制的にサーチパターンに
|
54
54
|
|
55
|
-
|
55
|
+
passShapes[1].getText().setText( nameSP );
|
56
56
|
|
57
57
|
//終了-臨時:強制的にサーチパターンに
|
58
58
|
|
59
59
|
|
60
60
|
|
61
|
-
|
61
|
+
var NowPattern = passShapes[1].getText().asString();
|
62
|
-
|
63
|
-
if(NowPattern == nameSP){
|
64
|
-
|
65
|
-
passShapes[1].getText().setText( nameRP );
|
66
|
-
|
67
|
-
}
|
68
62
|
|
69
63
|
|
70
64
|
|
71
|
-
|
65
|
+
if(NowPattern == nameSP){
|
72
66
|
|
73
|
-
pass
|
67
|
+
passShapes[1].getText().setText( nameRP );
|
74
68
|
|
75
|
-
|
69
|
+
}
|
76
70
|
|
77
|
-
|
71
|
+
|
78
72
|
|
79
|
-
|
73
|
+
//Slideをセーブ&クローズする
|
80
74
|
|
81
|
-
|
75
|
+
passdoc.saveAndClose();
|
82
76
|
|
83
|
-
|
77
|
+
//Slideを再度オープン&GetSlides
|
84
78
|
|
79
|
+
passdoc = SlidesApp.openById(passdocID);
|
80
|
+
|
81
|
+
passSlide = passdoc.getSlides()[0];
|
82
|
+
|
83
|
+
passShapes = passSlide.getShapes();
|
84
|
+
|
85
|
+
//リプレースしたドキュメントをPDFにする、ファイル名を付ける
|
86
|
+
|
85
|
-
|
87
|
+
var pdf = DriveApp.getFileById( passdocID ).getAs( MimeType.PDF).setName('山田 太郎様修了書.pdf'); //OK
|
86
88
|
|
87
89
|
|
88
90
|
|
89
|
-
|
91
|
+
//PDF修了書作成@修了書格納フォルダ
|
90
92
|
|
91
|
-
|
93
|
+
const folderID = '1BjE7sK9qbcaIFvFoczmOnGPyfYt1QNQM';
|
92
94
|
|
93
|
-
|
95
|
+
const folder = DriveApp.getFolderById(folderID); //フォルダIDでフォルダをGET
|
94
96
|
|
95
|
-
|
97
|
+
folder.createFile(pdf); //ファイルを作る
|
96
98
|
|
97
|
-
|
99
|
+
}
|
98
100
|
|
99
101
|
```
|
100
102
|
|
@@ -106,7 +108,7 @@
|
|
106
108
|
|
107
109
|
デバッグで変数の値を確認。デバッガーのスクリーンコピーを載せます(説明も書いておきました)。
|
108
110
|
|
109
|
-
![イメージ説明](
|
111
|
+
![イメージ説明](a549a7ecff1ae7ffa3e8d3fab35bc806.png)
|
110
112
|
|
111
113
|
|
112
114
|
|
@@ -114,6 +116,6 @@
|
|
114
116
|
|
115
117
|
### 補足情報(FW/ツールのバージョンなど)
|
116
118
|
|
117
|
-
1
|
119
|
+
1キャラ入るものなのでしょうか?キャラの正体が分からず困っています。
|
118
120
|
|
119
121
|
よろしく回答お願いいたします。
|
3
test
CHANGED
File without changes
|
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
//Googleスライドから修了書コピーを取得
|
28
28
|
|
29
|
-
var passdocID = '
|
29
|
+
var passdocID = '*****id';
|
30
30
|
|
31
31
|
var passdoc = SlidesApp.openById(passdocID);
|
32
32
|
|
@@ -88,7 +88,7 @@
|
|
88
88
|
|
89
89
|
//PDF修了書作成@修了書格納フォルダ
|
90
90
|
|
91
|
-
const folderID = '
|
91
|
+
const folderID = '****id';
|
92
92
|
|
93
93
|
const folder = DriveApp.getFolderById(folderID); //フォルダIDでフォルダをGET
|
94
94
|
|
2
誤記訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -104,7 +104,7 @@
|
|
104
104
|
|
105
105
|
|
106
106
|
|
107
|
-
デバッグで変数の値を確認。デバッガーのスクリーンコピーを載せます(説明
|
107
|
+
デバッグで変数の値を確認。デバッガーのスクリーンコピーを載せます(説明も書いておきました)。
|
108
108
|
|
109
109
|
![イメージ説明](b84d6f889efe99fea281d6528b3f9301.png)
|
110
110
|
|
1
前の質問は、余計な情報がたくさんあり大変失礼しました。 また追加のテストでわかったことがあるので極力質問をシンプルにしたつもりです、どうぞよろしくお願いします。
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,7 +6,9 @@
|
|
6
6
|
|
7
7
|
ここに質問の内容を詳しく書いてください。
|
8
8
|
|
9
|
-
シェイプのGet text as Strings での値とSEARCH pattern が合致しない
|
9
|
+
シェイプのGet text as Strings での値とSEARCH pattern が合致しない。
|
10
|
+
|
11
|
+
スライドのテキストシェイプに Get Text、 Set text で代入したストリングをGet text as Strings で取り出すと、ストリングの最後に1スペースついてしまう。
|
10
12
|
|
11
13
|
|
12
14
|
|
@@ -16,11 +18,15 @@
|
|
16
18
|
|
17
19
|
```GAS
|
18
20
|
|
21
|
+
コード
|
22
|
+
|
23
|
+
```
|
24
|
+
|
19
25
|
function matchNGFunction() {
|
20
26
|
|
21
27
|
//Googleスライドから修了書コピーを取得
|
22
28
|
|
23
|
-
var passdocID = '
|
29
|
+
var passdocID = '17O2uyEctnsd_OtehBO5PmFYi8pDHZwHf4nU9bOepnxw';
|
24
30
|
|
25
31
|
var passdoc = SlidesApp.openById(passdocID);
|
26
32
|
|
@@ -30,185 +36,43 @@
|
|
30
36
|
|
31
37
|
|
32
38
|
|
33
|
-
//
|
39
|
+
//受講票のサーチパターンの初期値定義
|
34
40
|
|
35
|
-
var spreadsheet = SpreadsheetApp.getActive();
|
36
|
-
|
37
|
-
var sheet = spreadsheet.getActiveSheet();
|
38
|
-
|
39
|
-
var
|
41
|
+
var nameSP = '氏名 :{氏名}';
|
40
|
-
|
41
|
-
var rangeValues = range.getValues();
|
42
42
|
|
43
43
|
|
44
44
|
|
45
|
-
//
|
45
|
+
//受講票のリプレースパターンの定義
|
46
46
|
|
47
|
-
var
|
47
|
+
var nameRP = '氏名 :山田 太郎様';
|
48
48
|
|
49
|
-
|
49
|
+
//データ作成処理
|
50
50
|
|
51
|
-
|
51
|
+
|
52
|
-
|
53
|
-
var companyp = 4;//団体名
|
54
|
-
|
55
|
-
var addrsp = 5;//住所
|
56
|
-
|
57
|
-
var mnbrshpp = 6;//会員種別
|
58
|
-
|
59
|
-
var telp = 7;//電話番号
|
60
|
-
|
61
|
-
var idp = 8;//ID
|
62
|
-
|
63
|
-
var pwp = 9;//パスワード
|
64
|
-
|
65
|
-
var bnktrp = 10;//振込済み
|
66
|
-
|
67
|
-
var ecmfrmp = 11;//登録確認済み
|
68
|
-
|
69
|
-
var sndmp = 12; //送信済みマーク
|
70
|
-
|
71
|
-
var stdycmpp = 13; //履修済みマーク列位置、本メールを送るべき行のこの欄は空白、送信後タイムスタンプが付けられる
|
72
|
-
|
73
|
-
var rmndstdycmpsndp = 14; //履修督促送信済み
|
74
|
-
|
75
|
-
var passSendedp = 15; //修了書作成済み
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
//受講票のサーチパターンの初期値定義
|
80
|
-
|
81
|
-
var iNameSP = '氏名 :{氏名}';
|
82
|
-
|
83
|
-
var iCompanySP = '法人名:{団体名}';
|
84
|
-
|
85
|
-
var iTodaySP = '発行日:{本日日付}';
|
86
|
-
|
87
|
-
//受講票のサーチパターンに初期値を入力
|
88
|
-
|
89
|
-
var nameSP = iNameSP;
|
90
|
-
|
91
|
-
var companySP = iCompanySP;
|
92
|
-
|
93
|
-
var todaySP = iTodaySP;
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
//メイン処理
|
98
|
-
|
99
|
-
//本日日付の作成
|
100
|
-
|
101
|
-
var today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy年MM月dd日');
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
for(var i = 1; i < rangeValues.length ; i++) {
|
106
|
-
|
107
|
-
//各行のデータをゲット
|
108
|
-
|
109
|
-
var sname = rangeValues[i][snamep]; //姓
|
110
|
-
|
111
|
-
var fname = rangeValues[i][fnamep]; //名
|
112
|
-
|
113
|
-
var email = rangeValues[i][emailp]; //メールアドレス
|
114
|
-
|
115
|
-
var company = rangeValues[i][companyp]; //団体名
|
116
|
-
|
117
|
-
var addrs = rangeValues[i][addrsp]; //住所
|
118
|
-
|
119
|
-
var mnbrshp = rangeValues[i][mnbrshpp]; //会員種別
|
120
|
-
|
121
|
-
var tel = rangeValues[i][telp]; //電話番号
|
122
|
-
|
123
|
-
var id = rangeValues[i][idp]; //ID
|
124
|
-
|
125
|
-
var pw = rangeValues[i][pwp]; //パスワード
|
126
|
-
|
127
|
-
var bnktr = rangeValues[i][bnktrp]; //振込済み
|
128
|
-
|
129
|
-
var ecmfrm = rangeValues[i][ecmfrmp]; //登録確認済み
|
130
|
-
|
131
|
-
var sndm = rangeValues[i][sndmp];//送信済みマーク
|
132
|
-
|
133
|
-
var stdycmp = rangeValues[i][stdycmpp];//履修済み
|
134
|
-
|
135
|
-
var rmndstdycmpsnd = rangeValues[i][rmndstdycmpsndp]; //履修督促送信済み
|
136
|
-
|
137
|
-
var passSended = rangeValues[i][passSendedp]; //修了書作成済み
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
//受講票のリプレースパターンの定義
|
142
|
-
|
143
|
-
var nameRP = '氏名 :'+sname+' '+fname+'様';
|
144
|
-
|
145
|
-
var companyRP = '法人名:'+company;
|
146
|
-
|
147
|
-
var todayRP = '発行日:'+today;
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
//データ作成処理
|
152
|
-
|
153
|
-
if(passSended == ''&& stdycmp) {
|
154
|
-
|
155
|
-
//Presentationのテキストを書式なしで置換
|
156
|
-
|
157
|
-
console.log('SPの値'+nameSP+' '+companySP+' '+todaySP);
|
158
|
-
|
159
|
-
var shapesLength = passShapes.length;
|
160
|
-
|
161
|
-
|
162
52
|
|
163
53
|
//開始-臨時:強制的にサーチパターンに
|
164
54
|
|
165
55
|
passShapes[1].getText().setText( nameSP );
|
166
56
|
|
167
|
-
passShapes[0].getText().setText( companySP );
|
168
|
-
|
169
|
-
passShapes[2].getText().setText( todaySP );
|
170
|
-
|
171
57
|
//終了-臨時:強制的にサーチパターンに
|
172
58
|
|
173
59
|
|
174
60
|
|
175
|
-
|
61
|
+
var NowPattern = passShapes[1].getText().asString();
|
176
62
|
|
177
|
-
|
63
|
+
if(NowPattern == nameSP){
|
178
64
|
|
179
|
-
|
65
|
+
passShapes[1].getText().setText( nameRP );
|
180
66
|
|
181
|
-
|
67
|
+
}
|
182
68
|
|
183
|
-
|
69
|
+
|
184
70
|
|
185
|
-
nameSP = nameRP; //サーチパターンをリプレースパターンに置き換える
|
186
|
-
|
187
|
-
}
|
188
|
-
|
189
|
-
if(ReplacePattern == companySP){ //shapesの数の分だけサーチパターンを探す 法人名
|
190
|
-
|
191
|
-
passShapes[sn].getText().setText( companyRP );
|
192
|
-
|
193
|
-
companySP = companyRP; //サーチパターンをリプレースパターンに置き換える
|
194
|
-
|
195
|
-
}
|
196
|
-
|
197
|
-
if(ReplacePattern == todaySP){ //shapesの数の分だけサーチパターンを探す 発行日
|
198
|
-
|
199
|
-
passShapes[sn].getText().setText( todayRP );
|
200
|
-
|
201
|
-
todaySP = todayRP; //サーチパターンをリプレースパターンに置き換える
|
202
|
-
|
203
|
-
}
|
204
|
-
|
205
|
-
}
|
206
|
-
|
207
|
-
//
|
71
|
+
//Slideをセーブ&クローズする
|
208
72
|
|
209
73
|
passdoc.saveAndClose();
|
210
74
|
|
211
|
-
//
|
75
|
+
//Slideを再度オープン&GetSlides
|
212
76
|
|
213
77
|
passdoc = SlidesApp.openById(passdocID);
|
214
78
|
|
@@ -218,7 +82,7 @@
|
|
218
82
|
|
219
83
|
//リプレースしたドキュメントをPDFにする、ファイル名を付ける
|
220
84
|
|
221
|
-
var pdf = DriveApp.getFileById( passdocID ).getAs( MimeType.PDF).setName(
|
85
|
+
var pdf = DriveApp.getFileById( passdocID ).getAs( MimeType.PDF).setName('山田 太郎様修了書.pdf'); //OK
|
222
86
|
|
223
87
|
|
224
88
|
|
@@ -230,47 +94,7 @@
|
|
230
94
|
|
231
95
|
folder.createFile(pdf); //ファイルを作る
|
232
96
|
|
233
|
-
|
234
|
-
|
235
|
-
//作成済みマーク(タイムスタンプ)をつける 「送信済み」列位置は1オリジン
|
236
|
-
|
237
|
-
// 現在時刻をゲット
|
238
|
-
|
239
|
-
var currentTime = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss:sss');
|
240
|
-
|
241
|
-
var j = i+1; //1オリジンの行番号へ
|
242
|
-
|
243
|
-
sheet.getRange(j,passSendedp+1).setValue(currentTime); }
|
244
|
-
|
245
97
|
}
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
//ドキュメントをオリジナルに戻す
|
250
|
-
|
251
|
-
ReplacePattern = passShapes[sn].getText().asString();
|
252
|
-
|
253
|
-
for (var sn = 0;sn < passShapes.length; sn++){ //shapesの数の分だけサーチパターンを探す 氏名
|
254
|
-
|
255
|
-
if(ReplacePattern == nameSP){
|
256
|
-
|
257
|
-
passShapes[sn].getText().setText( iNameSP );
|
258
|
-
|
259
|
-
}
|
260
|
-
|
261
|
-
if(ReplacePattern == companySP){ //shapesの数の分だけサーチパターンを探す 法人名
|
262
|
-
|
263
|
-
passShapes[sn].getText().setText( iCompanySP );
|
264
|
-
|
265
|
-
}
|
266
|
-
|
267
|
-
if(ReplacePattern == todaySP){ //shapesの数の分だけサーチパターンを探す 発行日
|
268
|
-
|
269
|
-
passShapes[sn].getText().setText( iTodaySP );
|
270
|
-
|
271
|
-
}
|
272
|
-
|
273
|
-
}
|
274
98
|
|
275
99
|
```
|
276
100
|
|
@@ -280,24 +104,16 @@
|
|
280
104
|
|
281
105
|
|
282
106
|
|
283
|
-
|
107
|
+
デバッグで変数の値を確認。デバッガーのスクリーンコピーを載せます(説明会ておきました)。
|
284
108
|
|
285
|
-
|
109
|
+
![イメージ説明](b84d6f889efe99fea281d6528b3f9301.png)
|
286
110
|
|
287
|
-
passShapes[1].getText().setText( nameSP );
|
288
111
|
|
289
|
-
passShapes[0].getText().setText( companySP );
|
290
|
-
|
291
|
-
passShapes[2].getText().setText( todaySP );
|
292
|
-
|
293
|
-
//終了-臨時:強制的にサーチパターンに
|
294
112
|
|
295
113
|
|
296
114
|
|
297
115
|
### 補足情報(FW/ツールのバージョンなど)
|
298
116
|
|
299
|
-
|
300
|
-
|
301
|
-
|
117
|
+
1スペース入るものなのでしょうか?
|
302
118
|
|
303
119
|
よろしく回答お願いいたします。
|