質問編集履歴

2

最終版

2020/08/11 14:40

投稿

kiha82
kiha82

スコア1

test CHANGED
File without changes
test CHANGED
@@ -18,45 +18,13 @@
18
18
 
19
19
 
20
20
 
21
- ~~現在のスクリプトではメールを送ることはできるのですが、添付ファイルがどのメールでも
22
-
23
- 1つ抜けてしまいます。(添付ファイル1~5まであるうちの1~4までしか送れないです。)~~
24
-
25
-  また、ファイル名が添付ファイル名記載のなかで2つ以上存在しない、
26
-
27
- 若しくはファイル名の番号が飛んでいると、そこで動作が停止してしまいます。
28
-
29
-
30
-
31
- 1,~~添付ファイルが1つ抜けてしまう~~→前回ご回答にて解決することができました。
21
+ 1,~~添付ファイルが1つ抜けてしまう~~
32
-
22
+
33
- 2,対象ファイル名(拡張子付き)がシート記載にあるが、google Drive上にデータが存在するとエラ
23
+ 2,~~対象ファイル名(拡張子付き)がシート記載にあるが、google Drive上にデータが存在するとエラーが出てしまう。~~
34
-
35
-  ーが出てしまう。
24
+
36
-
37
-
38
-
39
- ### 今回のエラー状況と試したこと
25
+
40
-
41
- 1, .getFilesByNameと.getFileByIdともにundefinedと定義されていないと出てきてしまう
26
+
42
-
43
- 2, attachmentFilesの部分が修正前の物でも同様のエラーが出てきてしまいます。
44
-
45
-
46
-
47
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
48
-
49
- attachmentFiles.push(folderid[0].getFileById(fileID).next())
50
-
51
- attachmentFiles.push(folderid[0].getFilesByName(arr[i][4]).next())
52
-
53
-
54
-
55
- にファイル添付部分を変更したりしましたが、どれもダメでした。
56
-
57
-
58
-
59
- ### 該当のソースコード(ver.1.1)
27
+ ### 該当のソースコード
60
28
 
61
29
 
62
30
 
@@ -136,462 +104,218 @@
136
104
 
137
105
 
138
106
 
107
+ for(var i = 0; i < arr.length; i++){
108
+
109
+
110
+
111
+ //送付先メールアドレスを取得
112
+
113
+ var strTo = arr[i][3];
114
+
115
+
116
+
117
+ for (var j = 0; j <= 5; j++) {
118
+
119
+ //添付ファイル1~5を取得(空白ならスキップ)
120
+
121
+ if(arr[i][j + 4] != ''){
122
+
123
+ var filename = arr[i][j + 4];
124
+
125
+ var files = folder.getFilesByName(filename);
126
+
127
+
128
+
129
+ //ファイルがあるかどうか
130
+
131
+ while (files.hasNext() ){ 
132
+
133
+  //添付する
134
+
135
+ attachmentFiles.push(files.next())
136
+
137
+ }
138
+
139
+ }
140
+
141
+ }
142
+
143
+
144
+
145
+ //-----------本文の差込データ作成------------
146
+
147
+   // 対象行の差込データを取得
148
+
149
+ var sasikomiData1 = Atesakisheet.getRange(i +2, 1).getValue();//社名
150
+
151
+ var sasikomiData2 = Atesakisheet.getRange(i +2, 2).getValue();//部署
152
+
153
+ var sasikomiData3 = Atesakisheet.getRange(i +2, 3).getValue();//名前
154
+
155
+
156
+
157
+ var sasikomiGoBody = body;
158
+
159
+
160
+
161
+ // 差込データが入力されている場合は、差込処理を行う
162
+
163
+ if (sasikomiData1 != "") {
164
+
165
+ sasikomiGoBody = sasikomiGoBody.replace("{{差込データ1}}", sasikomiData1, "g");
166
+
167
+ }
168
+
169
+ if (sasikomiData2 != "") {
170
+
171
+ sasikomiGoBody = sasikomiGoBody.replace("{{差込データ2}}", sasikomiData2, "g");
172
+
173
+ }
174
+
175
+ if (sasikomiData3 != "") {
176
+
177
+ sasikomiGoBody = sasikomiGoBody.replace("{{差込データ3}}", sasikomiData3, "g");
178
+
179
+ }
180
+
181
+
182
+
183
+ //--------------------メール送信と次の行への準備-----------------
184
+
185
+ //メールを送信
186
+
187
+ //GmailApp.sendEmail(strTo, subject, sasikomiGoBody,{attachments:attachmentFiles});
188
+
189
+
190
+
191
+ //添付の初期化
192
+
193
+ attachmentFiles = [];
194
+
195
+ };
196
+
197
+
198
+
199
+ // 終了確認ダイアログを表示
200
+
201
+ Browser.msgBox("確認", "メール送信が完了しました。", Browser.Buttons.OK);
202
+
203
+
204
+
205
+ /*
206
+
207
+ forループでの処理
208
+
209
+ 企業ごとに添付取得、本文差替、メール送信までを行います。
210
+
211
+ */
212
+
213
+ };
214
+
215
+
216
+
217
+ /*
218
+
219
+ スプレッドシートを開いた際に自動実行
220
+
221
+ コントロールメニューにスクリプト実行コマンドを追加
222
+
223
+ */
224
+
225
+ function onOpen() {
226
+
227
+ var sheet = SpreadsheetApp.getActiveSpreadsheet();
228
+
229
+ var entries = [
230
+
231
+ {
232
+
233
+ name : "メール一斉送信",
234
+
235
+ functionName : "sendMail"
236
+
237
+ }
238
+
239
+ ];
240
+
241
+ sheet.addMenu("スクリプト実行", entries);
242
+
243
+ };
244
+
245
+ ```
246
+
247
+ ### 補足情報(FW/ツールのバージョンなど)
248
+
249
+ こちらを参考にしました。
250
+
251
+ [リンク](https://teratail.com/questions/119142)
252
+
253
+
254
+
255
+ 添付がズレている点の修正とファイルのあるかどうかを修正しました。(ver1.1)
256
+
257
+ 実現したいことの文を修正しました。
258
+
259
+
260
+
261
+ 参考スクリプト
262
+
263
+ スプレッドシート上のファイルがあるか判断して削除していく
264
+
265
+ ```
266
+
267
+ function myFunction() {
268
+
269
+  var folderid = DriveApp.getFolderById('-----------'); 
270
+
271
+ var book = SpreadsheetApp.getActiveSpreadsheet();
272
+
273
+ var Atesakisheet = book.getSheetByName("宛先リスト");
274
+
275
+ var lastRow = Atesakisheet.getLastRow();
276
+
277
+ var arr = Atesakisheet.getRange(2, 5, lastRow - 1 , 12).getValues();
278
+
279
+  
280
+
139
- for(var i = 0, l = arr.length; i < l; i++){
281
+ for(var i = 0, l = arr.length; i < l; i++){
140
-
141
-
142
-
143
- //送付先メールアドレスを取得
144
-
145
- var strTo = arr[i][3];
146
282
 
147
283
 
148
284
 
149
- //添付ファイル1~5を取得(空白ならスキップ)
150
-
151
- if(arr[i][4] != ''){
152
-
153
- var filename = arr[i][4];
154
-
155
- var files_ichiran = folderid.getFiles()
156
-
157
-
158
-
159
- //ファイルがあるかどうか
160
-
161
- if ( files_ichiran.hasNext() ){ 
162
-
163
- while ( files_ichiran.hasNext() ){
164
-
165
-  var attachedfile = files_ichiran.next();
166
-
167
-
168
-
169
- if ( attachedfile.getName().indexOf(filename) != -1 ){
170
-
171
-   /var fileID = attachedfile.getId(); ファイルのIDの取得(ログ出しで確認の為)
172
-
173
- //console.log(fileID, 'fileIDは?→取得できている')
174
-
175
- //console.log(filename, '添付ファイル名は?→取得できている')
176
-
177
-  //添付する
178
-
179
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
180
-
181
- }
182
-
183
- }
184
-
185
- }
186
-
187
- }else{
188
-
189
- }
190
-
191
-
192
-
193
-   if(arr[i][5] != ''){
194
-
195
- var filename = arr[i][5];
196
-
197
- var files_ichiran = folderid.getFiles()
198
-
199
-
200
-
201
- //ファイルがあるかどうか
202
-
203
- if ( files_ichiran.hasNext() ){ 
204
-
205
- while ( files_ichiran.hasNext() ){
206
-
207
-   var attachedfile = files_ichiran.next();
208
-
209
-
210
-
211
- if ( attachedfile.getName().indexOf(filename) != -1 ){
212
-
213
-    //var fileID = attachedfile.getId(); ファイルのIDの取得(ログ出しで確認の為)
214
-
215
- //console.log(fileID, 'fileIDは?→取得できている')
216
-
217
- //console.log(filename, '添付ファイル名は?→取得できている')
218
-
219
-  //添付する
220
-
221
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
222
-
223
- }
224
-
225
- }
226
-
227
- }
228
-
229
- }else{
230
-
231
- }
232
-
233
-
234
-
235
-   if(arr[i][6] != ''){
236
-
237
- var filename = arr[i][6];
238
-
239
- var files_ichiran = folderid.getFiles()
240
-
241
-
242
-
243
- //ファイルがあるかどうか
244
-
245
- if ( files_ichiran.hasNext() ){ 
246
-
247
- while ( files_ichiran.hasNext() ){
248
-
249
-   var attachedfile = files_ichiran.next();
250
-
251
-
252
-
253
- if ( attachedfile.getName().indexOf(filename) != -1 ){
254
-
255
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
256
-
257
- }
258
-
259
- }
260
-
261
- }
262
-
263
- }else{
264
-
265
- }
266
-
267
-
268
-
269
-   if(arr[i][7] != ''){
270
-
271
- var filename = arr[i][7];
272
-
273
- var files_ichiran = folderid.getFiles()
274
-
275
-
276
-
277
- //ファイルがあるかどうか
278
-
279
- if ( files_ichiran.hasNext() ){ 
280
-
281
- while ( files_ichiran.hasNext() ){
282
-
283
-   var attachedfile = files_ichiran.next();
284
-
285
-
286
-
287
- if ( attachedfile.getName().indexOf(filename) != -1 ){
288
-
289
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
290
-
291
- }
292
-
293
- }
294
-
295
- }
296
-
297
- }else{
298
-
299
- }
300
-
301
-
302
-
303
-   if(arr[i][8] != ''){
304
-
305
- var filename = arr[i][8];
306
-
307
- var files_ichiran = folderid.getFiles()
308
-
309
-
310
-
311
- //ファイルがあるかどうか
312
-
313
- if ( files_ichiran.hasNext() ){ 
314
-
315
- while ( files_ichiran.hasNext() ){
316
-
317
-   var attachedfile = files_ichiran.next();
318
-
319
-
320
-
321
- if ( attachedfile.getName().indexOf(filename) != -1 ){
322
-
323
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
324
-
325
- }
326
-
327
- }
328
-
329
- }
330
-
331
- }else{
332
-
333
- }
334
-
335
-
336
-
337
-   if(arr[i][9] != ''){
338
-
339
- var filename = arr[i][9];
340
-
341
- var files_ichiran = folderid.getFiles()
342
-
343
-
344
-
345
- //ファイルがあるかどうか
346
-
347
- if ( files_ichiran.hasNext() ){ 
348
-
349
- while ( files_ichiran.hasNext() ){
350
-
351
-   var attachedfile = files_ichiran.next();
352
-
353
-
354
-
355
- if ( attachedfile.getName().indexOf(filename) != -1 ){
356
-
357
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
358
-
359
- }
360
-
361
- }
362
-
363
- }
364
-
365
- }else{
366
-
367
- }
368
-
369
-
370
-
371
- //-----------本文の差込データ作成------------
372
-
373
-   // 対象行の差込データを取得
374
-
375
- var sasikomiData1 = Atesakisheet.getRange(i +2, 1).getValue();//社名
376
-
377
- var sasikomiData2 = Atesakisheet.getRange(i +2, 2).getValue();//部署
378
-
379
- var sasikomiData3 = Atesakisheet.getRange(i +2, 3).getValue();//名前
380
-
381
-
382
-
383
- var sasikomiGoBody = body;
384
-
385
-
386
-
387
- // 差込データが入力されている場合は、差込処理を行う
388
-
389
- if (sasikomiData1 != "") {
390
-
391
- sasikomiGoBody = sasikomiGoBody.replace("{{差込データ1}}", sasikomiData1, "g");
392
-
393
- }
394
-
395
- if (sasikomiData2 != "") {
396
-
397
- sasikomiGoBody = sasikomiGoBody.replace("{{差込データ2}}", sasikomiData2, "g");
398
-
399
- }
400
-
401
- if (sasikomiData3 != "") {
402
-
403
- sasikomiGoBody = sasikomiGoBody.replace("{{差込データ3}}", sasikomiData3, "g");
404
-
405
- }
406
-
407
-
408
-
409
- //--------------------メール送信と次の行への準備-----------------
410
-
411
- //メールを送信
412
-
413
- //GmailApp.sendEmail(strTo, subject, sasikomiGoBody,{attachments:attachmentFiles});
414
-
415
-
416
-
417
- //添付の初期化
418
-
419
- attachmentFiles = [];
420
-
421
- };
422
-
423
-
424
-
425
- // 終了確認ダイアログを表示
426
-
427
- Browser.msgBox("確認", "メール送信が完了しました。", Browser.Buttons.OK);
428
-
429
-
430
-
431
- /*
432
-
433
- forループでの処理
434
-
435
- 企業ごとに添付取得、本文差替、メール送信までを行います。
436
-
437
- */
438
-
439
- };
440
-
441
-
442
-
443
- /*
444
-
445
- スプレッドシートを開いた際に自動実行
446
-
447
- コントロールメニューにスクリプト実行コマンドを追加
448
-
449
- */
450
-
451
- function onOpen() {
452
-
453
- var sheet = SpreadsheetApp.getActiveSpreadsheet();
454
-
455
- var entries = [
456
-
457
- {
458
-
459
- name : "メール一斉送信",
460
-
461
- functionName : "sendMail"
462
-
463
- }
464
-
465
- ];
466
-
467
- sheet.addMenu("スクリプト実行", entries);
468
-
469
- };
470
-
471
-
285
+ if(arr[i][0] != ''){
286
+
287
+ var filesname = arr[i][0]
288
+
289
+ var files_ichiran = folderid.getFiles();
290
+
291
+ if ( files_ichiran.hasNext() ){ 
292
+
293
+ while ( files_ichiran.hasNext() ){ 
294
+
295
+ var deletefiles = files_ichiran.next();
296
+
297
+ if ( deletefiles.getName().indexOf(arr[i][0]) != -1 ){
298
+
299
+ var deletefiles = deletefiles.getId(); 
300
+
301
+ var deletefile = DriveApp.getFileById(deletefiles); 
302
+
303
+ deletefile.setTrashed(true);
304
+
305
+ }
306
+
307
+ }
308
+
309
+ }else{}
310
+
311
+ }
312
+
313
+ //
314
+
315
+ }
316
+
317
+ }
318
+
319
+ }
472
320
 
473
321
  ```
474
-
475
-
476
-
477
- ### 補足情報(FW/ツールのバージョンなど)
478
-
479
- こちらを参考にしました。
480
-
481
- [リンク](https://teratail.com/questions/119142)
482
-
483
-
484
-
485
- 添付がズレている点の修正とファイルのあるかどうかを修正しました。(ver1.2)
486
-
487
- 実現したいことの文を修正しました。
488
-
489
-
490
-
491
- 修正前の構文 
492
-
493
- ```
494
-
495
- //フォルダー情報を添付ファイルのフォルダIDで取得
496
-
497
- var folders = DriveApp.getFolderById('-----------');
498
-
499
- //~省略~
500
-
501
-  for(var i = 0, l = arr.length; i < l; i++){
502
-
503
-
504
-
505
-     if(arr[i][4] != ''){
506
-
507
- attachmentFiles.push(folders[0].getFilesByName(arr[i][4]).next());
508
-
509
- }
510
-
511
-     //以下、arr[i][4]の部分をarr[i][9]まで繰り返し
512
-
513
- ```     
514
-
515
- 参考スクリプト(ver1.2用)
516
-
517
- スプレッドシート上のファイルがあるか判断して削除していく
518
-
519
- ```
520
-
521
- function myFunction() {
522
-
523
-  var folderid = DriveApp.getFolderById('-----------'); 
524
-
525
- var book = SpreadsheetApp.getActiveSpreadsheet();
526
-
527
- var Atesakisheet = book.getSheetByName("宛先リスト");
528
-
529
- var lastRow = Atesakisheet.getLastRow();
530
-
531
- var arr = Atesakisheet.getRange(2, 5, lastRow - 1 , 12).getValues();
532
-
533
-  
534
-
535
- for(var i = 0, l = arr.length; i < l; i++){
536
-
537
-
538
-
539
- if(arr[i][0] != ''){
540
-
541
- var filesname = arr[i][0]
542
-
543
- var files_ichiran = folderid.getFiles();
544
-
545
- if ( files_ichiran.hasNext() ){ 
546
-
547
- while ( files_ichiran.hasNext() ){ 
548
-
549
- var deletefiles = files_ichiran.next();
550
-
551
- if ( deletefiles.getName().indexOf(arr[i][0]) != -1 ){
552
-
553
- var deletefiles = deletefiles.getId(); 
554
-
555
- var deletefile = DriveApp.getFileById(deletefiles); 
556
-
557
- deletefile.setTrashed(true);
558
-
559
- }
560
-
561
- }
562
-
563
- }else{}
564
-
565
- }
566
-
567
- //以下、arr[i][0]を変えて繰り返し
568
-
569
- }
570
-
571
- }
572
-
573
- }
574
-
575
-
576
-
577
- //~以下、開いたときの動作は省略~
578
-
579
-
580
-
581
- ```
582
-
583
-
584
-
585
- ### 全体の運用予定
586
-
587
- ソフト、VBAで出力(エクセル,PDF出力したものを最終確認をし、Driveにアップ。既存流用)
588
-
589
-
590
-
591
- 添付ファイルを探して宛先に送付(今回の作成している部分)
592
-
593
-
594
-
595
- Drive内ファイル削除(上記参考スクリプト。新規作成)
596
-
597
- (同じシートを元にする事で、削除できなかったものは、添付エラーしたものとわかる)

1

構文の修正、追加と文章情報についての更新

2020/08/11 14:40

投稿

kiha82
kiha82

スコア1

test CHANGED
File without changes
test CHANGED
@@ -14,17 +14,13 @@
14
14
 
15
15
 
16
16
 
17
-
18
-
19
- ### 発生している問題・エラーメッセージ
17
+ ### 発生している問題
20
-
21
-
22
-
18
+
19
+
20
+
23
-  現在のスクリプトではメールを送ることはできるのですが、添付ファイルがどのメールでも
21
+ ~~現在のスクリプトではメールを送ることはできるのですが、添付ファイルがどのメールでも
24
-
22
+
25
- 1つ抜けてしまいます。(添付ファイル1~5まであるうちの1~4までしか送れないです。)
23
+ 1つ抜けてしまいます。(添付ファイル1~5まであるうちの1~4までしか送れないです。)~~
26
-
27
-
28
24
 
29
25
   また、ファイル名が添付ファイル名記載のなかで2つ以上存在しない、
30
26
 
@@ -32,9 +28,35 @@
32
28
 
33
29
 
34
30
 
35
-
31
+ 1,~~添付ファイルが1つ抜けてしまう~~→前回ご回答にて解決することができました。
32
+
36
-
33
+ 2,対象ファイル名(拡張子付き)がシート記載にあるが、google Drive上にデータが存在するとエラ
34
+
35
+  ーが出てしまう。
36
+
37
+
38
+
39
+ ### 今回のエラー状況と試したこと
40
+
41
+ 1, .getFilesByNameと.getFileByIdともにundefinedと定義されていないと出てきてしまう
42
+
43
+ 2, attachmentFilesの部分が修正前の物でも同様のエラーが出てきてしまいます。
44
+
45
+
46
+
47
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
48
+
49
+ attachmentFiles.push(folderid[0].getFileById(fileID).next())
50
+
51
+ attachmentFiles.push(folderid[0].getFilesByName(arr[i][4]).next())
52
+
53
+
54
+
55
+ にファイル添付部分を変更したりしましたが、どれもダメでした。
56
+
57
+
58
+
37
- ### 該当のソースコード
59
+ ### 該当のソースコード(ver.1.1)
38
60
 
39
61
 
40
62
 
@@ -106,7 +128,7 @@
106
128
 
107
129
  //フォルダー情報を添付ファイルのフォルダIDで取得
108
130
 
109
- var folders = [
131
+ var folderid = [
110
132
 
111
133
  DriveApp.getFolderById('----------------------------')
112
134
 
@@ -126,137 +148,433 @@
126
148
 
127
149
  //添付ファイル1~5を取得(空白ならスキップ)
128
150
 
151
+ if(arr[i][4] != ''){
152
+
153
+ var filename = arr[i][4];
154
+
155
+ var files_ichiran = folderid.getFiles()
156
+
157
+
158
+
159
+ //ファイルがあるかどうか
160
+
161
+ if ( files_ichiran.hasNext() ){ 
162
+
163
+ while ( files_ichiran.hasNext() ){
164
+
165
+  var attachedfile = files_ichiran.next();
166
+
167
+
168
+
169
+ if ( attachedfile.getName().indexOf(filename) != -1 ){
170
+
171
+   /var fileID = attachedfile.getId(); ファイルのIDの取得(ログ出しで確認の為)
172
+
173
+ //console.log(fileID, 'fileIDは?→取得できている')
174
+
175
+ //console.log(filename, '添付ファイル名は?→取得できている')
176
+
177
+  //添付する
178
+
179
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
180
+
181
+ }
182
+
183
+ }
184
+
185
+ }
186
+
187
+ }else{
188
+
189
+ }
190
+
191
+
192
+
129
- if(arr[i][5] != ''){
193
+   if(arr[i][5] != ''){
194
+
195
+ var filename = arr[i][5];
196
+
197
+ var files_ichiran = folderid.getFiles()
198
+
199
+
200
+
201
+ //ファイルがあるかどうか
202
+
203
+ if ( files_ichiran.hasNext() ){ 
204
+
205
+ while ( files_ichiran.hasNext() ){
206
+
207
+   var attachedfile = files_ichiran.next();
208
+
209
+
210
+
211
+ if ( attachedfile.getName().indexOf(filename) != -1 ){
212
+
213
+    //var fileID = attachedfile.getId(); ファイルのIDの取得(ログ出しで確認の為)
214
+
215
+ //console.log(fileID, 'fileIDは?→取得できている')
216
+
217
+ //console.log(filename, '添付ファイル名は?→取得できている')
218
+
219
+  //添付する
220
+
221
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
222
+
223
+ }
224
+
225
+ }
226
+
227
+ }
228
+
229
+ }else{
230
+
231
+ }
232
+
233
+
234
+
235
+   if(arr[i][6] != ''){
236
+
237
+ var filename = arr[i][6];
238
+
239
+ var files_ichiran = folderid.getFiles()
240
+
241
+
242
+
243
+ //ファイルがあるかどうか
244
+
245
+ if ( files_ichiran.hasNext() ){ 
246
+
247
+ while ( files_ichiran.hasNext() ){
248
+
249
+   var attachedfile = files_ichiran.next();
250
+
251
+
252
+
253
+ if ( attachedfile.getName().indexOf(filename) != -1 ){
254
+
255
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
256
+
257
+ }
258
+
259
+ }
260
+
261
+ }
262
+
263
+ }else{
264
+
265
+ }
266
+
267
+
268
+
269
+   if(arr[i][7] != ''){
270
+
271
+ var filename = arr[i][7];
272
+
273
+ var files_ichiran = folderid.getFiles()
274
+
275
+
276
+
277
+ //ファイルがあるかどうか
278
+
279
+ if ( files_ichiran.hasNext() ){ 
280
+
281
+ while ( files_ichiran.hasNext() ){
282
+
283
+   var attachedfile = files_ichiran.next();
284
+
285
+
286
+
287
+ if ( attachedfile.getName().indexOf(filename) != -1 ){
288
+
289
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
290
+
291
+ }
292
+
293
+ }
294
+
295
+ }
296
+
297
+ }else{
298
+
299
+ }
300
+
301
+
302
+
303
+   if(arr[i][8] != ''){
304
+
305
+ var filename = arr[i][8];
306
+
307
+ var files_ichiran = folderid.getFiles()
308
+
309
+
310
+
311
+ //ファイルがあるかどうか
312
+
313
+ if ( files_ichiran.hasNext() ){ 
314
+
315
+ while ( files_ichiran.hasNext() ){
316
+
317
+   var attachedfile = files_ichiran.next();
318
+
319
+
320
+
321
+ if ( attachedfile.getName().indexOf(filename) != -1 ){
322
+
323
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
324
+
325
+ }
326
+
327
+ }
328
+
329
+ }
330
+
331
+ }else{
332
+
333
+ }
334
+
335
+
336
+
337
+   if(arr[i][9] != ''){
338
+
339
+ var filename = arr[i][9];
340
+
341
+ var files_ichiran = folderid.getFiles()
342
+
343
+
344
+
345
+ //ファイルがあるかどうか
346
+
347
+ if ( files_ichiran.hasNext() ){ 
348
+
349
+ while ( files_ichiran.hasNext() ){
350
+
351
+   var attachedfile = files_ichiran.next();
352
+
353
+
354
+
355
+ if ( attachedfile.getName().indexOf(filename) != -1 ){
356
+
357
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
358
+
359
+ }
360
+
361
+ }
362
+
363
+ }
364
+
365
+ }else{
366
+
367
+ }
368
+
369
+
370
+
371
+ //-----------本文の差込データ作成------------
372
+
373
+   // 対象行の差込データを取得
374
+
375
+ var sasikomiData1 = Atesakisheet.getRange(i +2, 1).getValue();//社名
376
+
377
+ var sasikomiData2 = Atesakisheet.getRange(i +2, 2).getValue();//部署
378
+
379
+ var sasikomiData3 = Atesakisheet.getRange(i +2, 3).getValue();//名前
380
+
381
+
382
+
383
+ var sasikomiGoBody = body;
384
+
385
+
386
+
387
+ // 差込データが入力されている場合は、差込処理を行う
388
+
389
+ if (sasikomiData1 != "") {
390
+
391
+ sasikomiGoBody = sasikomiGoBody.replace("{{差込データ1}}", sasikomiData1, "g");
392
+
393
+ }
394
+
395
+ if (sasikomiData2 != "") {
396
+
397
+ sasikomiGoBody = sasikomiGoBody.replace("{{差込データ2}}", sasikomiData2, "g");
398
+
399
+ }
400
+
401
+ if (sasikomiData3 != "") {
402
+
403
+ sasikomiGoBody = sasikomiGoBody.replace("{{差込データ3}}", sasikomiData3, "g");
404
+
405
+ }
406
+
407
+
408
+
409
+ //--------------------メール送信と次の行への準備-----------------
410
+
411
+ //メールを送信
412
+
413
+ //GmailApp.sendEmail(strTo, subject, sasikomiGoBody,{attachments:attachmentFiles});
414
+
415
+
416
+
417
+ //添付の初期化
418
+
419
+ attachmentFiles = [];
420
+
421
+ };
422
+
423
+
424
+
425
+ // 終了確認ダイアログを表示
426
+
427
+ Browser.msgBox("確認", "メール送信が完了しました。", Browser.Buttons.OK);
428
+
429
+
430
+
431
+ /*
432
+
433
+ forループでの処理
434
+
435
+ 企業ごとに添付取得、本文差替、メール送信までを行います。
436
+
437
+ */
438
+
439
+ };
440
+
441
+
442
+
443
+ /*
444
+
445
+ スプレッドシートを開いた際に自動実行
446
+
447
+ コントロールメニューにスクリプト実行コマンドを追加
448
+
449
+ */
450
+
451
+ function onOpen() {
452
+
453
+ var sheet = SpreadsheetApp.getActiveSpreadsheet();
454
+
455
+ var entries = [
456
+
457
+ {
458
+
459
+ name : "メール一斉送信",
460
+
461
+ functionName : "sendMail"
462
+
463
+ }
464
+
465
+ ];
466
+
467
+ sheet.addMenu("スクリプト実行", entries);
468
+
469
+ };
470
+
471
+
472
+
473
+ ```
474
+
475
+
476
+
477
+ ### 補足情報(FW/ツールのバージョンなど)
478
+
479
+ こちらを参考にしました。
480
+
481
+ [リンク](https://teratail.com/questions/119142)
482
+
483
+
484
+
485
+ 添付がズレている点の修正とファイルのあるかどうかを修正しました。(ver1.2)
486
+
487
+ 実現したいことの文を修正しました。
488
+
489
+
490
+
491
+ 修正前の構文 
492
+
493
+ ```
494
+
495
+ //フォルダー情報を添付ファイルのフォルダIDで取得
496
+
497
+ var folders = DriveApp.getFolderById('-----------');
498
+
499
+ //~省略~
500
+
501
+  for(var i = 0, l = arr.length; i < l; i++){
502
+
503
+
504
+
505
+     if(arr[i][4] != ''){
130
506
 
131
507
  attachmentFiles.push(folders[0].getFilesByName(arr[i][4]).next());
132
508
 
133
- }   
509
+ }
510
+
134
-
511
+     //以下、arr[i][4]の部分をarr[i][9]まで繰り返し
512
+
513
+ ```     
514
+
515
+ 参考スクリプト(ver1.2用)
516
+
517
+ スプレッドシート上のファイルがあるか判断して削除していく
518
+
519
+ ```
520
+
521
+ function myFunction() {
522
+
523
+  var folderid = DriveApp.getFolderById('-----------'); 
524
+
525
+ var book = SpreadsheetApp.getActiveSpreadsheet();
526
+
527
+ var Atesakisheet = book.getSheetByName("宛先リスト");
528
+
529
+ var lastRow = Atesakisheet.getLastRow();
530
+
531
+ var arr = Atesakisheet.getRange(2, 5, lastRow - 1 , 12).getValues();
532
+
533
+  
534
+
535
+ for(var i = 0, l = arr.length; i < l; i++){
536
+
537
+
538
+
135
- if(arr[i][6] != ''){
539
+ if(arr[i][0] != ''){
540
+
136
-
541
+ var filesname = arr[i][0]
542
+
543
+ var files_ichiran = folderid.getFiles();
544
+
545
+ if ( files_ichiran.hasNext() ){ 
546
+
547
+ while ( files_ichiran.hasNext() ){ 
548
+
549
+ var deletefiles = files_ichiran.next();
550
+
137
- attachmentFiles.push(folders[0].getFilesByName(arr[i][5]).next());
551
+ if ( deletefiles.getName().indexOf(arr[i][0]) != -1 ){
138
-
139
- }//
552
+
140
-
141
- if(arr[i][7] != ''){
553
+ var deletefiles = deletefiles.getId(); 
142
-
554
+
143
- attachmentFiles.push(folders[0].getFilesByName(arr[i][6]).next());
555
+ var deletefile = DriveApp.getFileById(deletefiles); 
556
+
557
+ deletefile.setTrashed(true);
144
558
 
145
559
  }
146
560
 
147
- if(arr[i][8] != ''){
148
-
149
- attachmentFiles.push(folders[0].getFilesByName(arr[i][7]).next());
150
-
151
- }
561
+ }
152
-
562
+
153
- if(arr[i][9] != ''){
563
+ }else{}
154
-
155
- attachmentFiles.push(folders[0].getFilesByName(arr[i][8]).next());
564
+
156
-
157
- }
565
+ }
158
-
159
-
160
-
161
- //-----------本文の差込データ作成------------
566
+
162
-
163
-   // 対象行の差込データ取得
567
+ //以下、arr[i][0]変えて繰り返し
164
-
165
- var sasikomiData1 = Atesakisheet.getRange(i +2, 1).getValue();//社名
568
+
166
-
167
- var sasikomiData2 = Atesakisheet.getRange(i +2, 2).getValue();//部署
168
-
169
- var sasikomiData3 = Atesakisheet.getRange(i +2, 3).getValue();//名前
170
-
171
-
172
-
173
- var sasikomiGoBody = body;
174
-
175
-
176
-
177
- // 差込データが入力されている場合は、差込処理を行う
178
-
179
- if (sasikomiData1 != "") {
180
-
181
- sasikomiGoBody = sasikomiGoBody.replace("{{差込データ1}}", sasikomiData1, "g");
182
-
183
- }
569
+ }
184
-
185
- if (sasikomiData2 != "") {
570
+
186
-
187
- sasikomiGoBody = sasikomiGoBody.replace("{{差込データ2}}", sasikomiData2, "g");
188
-
189
- }
571
+ }
190
-
191
- if (sasikomiData3 != "") {
572
+
192
-
193
- sasikomiGoBody = sasikomiGoBody.replace("{{差込データ3}}", sasikomiData3, "g");
194
-
195
- }
573
+ }
196
-
197
-
198
-
199
- //--------------------メール送信と次の行への準備-----------------
574
+
200
-
201
- //メールを送信
575
+
202
-
203
- //GmailApp.sendEmail(strTo, subject, sasikomiGoBody,{attachments:attachmentFiles});
576
+
204
-
205
-
206
-
207
- //添付の初期化
208
-
209
- attachmentFiles = [];
210
-
211
- };
212
-
213
-
214
-
215
- // 終了確認ダイアログを表示
577
+ //~以下、開いたときの動作は省略~
216
-
217
- Browser.msgBox("確認", "メール送信が完了しました。", Browser.Buttons.OK);
218
-
219
-
220
-
221
- /*
222
-
223
- forループでの処理
224
-
225
- 企業ごとに添付取得、本文差替、メール送信までを行います。
226
-
227
- */
228
-
229
- };
230
-
231
-
232
-
233
- /*
234
-
235
- スプレッドシートを開いた際に自動実行
236
-
237
- コントロールメニューにスクリプト実行コマンドを追加
238
-
239
- */
240
-
241
- function onOpen() {
242
-
243
- var sheet = SpreadsheetApp.getActiveSpreadsheet();
244
-
245
- var entries = [
246
-
247
- {
248
-
249
- name : "メール一斉送信",
250
-
251
- functionName : "sendMail"
252
-
253
- }
254
-
255
- ];
256
-
257
- sheet.addMenu("スクリプト実行", entries);
258
-
259
- };
260
578
 
261
579
 
262
580
 
@@ -264,16 +582,16 @@
264
582
 
265
583
 
266
584
 
267
- ### 試したこと
585
+ ### 全体の運用予定
268
-
586
+
269
- var arr 部分でデータが取得できていることログで確認しています
587
+ ソフト、VBAで出力(エクセル,PDF出力したもを最終確認、Driveにアップ既存流用)
270
-
588
+
271
- For 以下の添付部分が上手く動かず、その後の文章差込と送信はできます。
589
+
272
-
273
-
274
-
590
+
275
- ### 補足情報FW/ツールバージョンなど
591
+ 添付ファイルを探して宛先に送付今回作成している部分
592
+
276
-
593
+
594
+
277
- こちらを参考にしました
595
+ Drive内ファイル削除(上記参考スクリプト新規作成)
278
-
596
+
279
- [リンク](https://teratail.com/questions/119142)
597
+ (同じシートを元にする事で、削除できなかったものは、添付エラーしたものとわかる)