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

質問編集履歴

2

最終版

2020/08/11 14:40

投稿

kiha82
kiha82

スコア1

title CHANGED
File without changes
body CHANGED
@@ -8,27 +8,11 @@
8
8
 
9
9
  ### 発生している問題
10
10
 
11
- ~~現在のスクリプトではメールを送ることはできるのですが、添付ファイルがどのメールでも
12
- 1つ抜けてしまいます。(添付ファイル1~5まであるうちの1~4までしか送れないです。)~~
13
-  また、ファイル名が添付ファイル名記載のなかで2以上存在ない、
11
+ 1,~~添付ファイルが1抜けてまう~~
14
- 若しくはファイル名の番号飛んでいそこで動作停止してしまいます
12
+ 2,~~対象ファイル名(拡張子付き)シート記載にあgoogle Drive上にデータ存在するとエラーが出てしま~~
15
13
 
16
- 1,~~添付ファイルが1つ抜けてしまう~~→前回ご回答にて解決することができました。
17
- 2,対象ファイル名(拡張子付き)がシート記載にあるが、google Drive上にデータが存在するとエラ
18
-  が出てしまう。
14
+ ### 該当のソスコード
19
15
 
20
- ### 今回のエラー状況と試したこと
21
- 1, .getFilesByNameと.getFileByIdともにundefinedと定義されていないと出てきてしまう
22
- 2, attachmentFilesの部分が修正前の物でも同様のエラーが出てきてしまいます。
23
-
24
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
25
- attachmentFiles.push(folderid[0].getFileById(fileID).next())
26
- attachmentFiles.push(folderid[0].getFilesByName(arr[i][4]).next())
27
-
28
- にファイル添付部分を変更したりしましたが、どれもダメでした。
29
-
30
- ### 該当のソースコード(ver.1.1)
31
-
32
16
  ```
33
17
  function sendMail(){
34
18
 
@@ -67,121 +51,24 @@
67
51
  DriveApp.getFolderById('----------------------------')
68
52
  ];
69
53
 
70
- for(var i = 0, l = arr.length; i < l; i++){
54
+ for(var i = 0; i < arr.length; i++){
71
-
72
- //送付先メールアドレスを取得
73
- var strTo = arr[i][3];
74
-
75
- //添付ファイル1~5を取得(空白ならスキップ)
76
- if(arr[i][4] != ''){
77
- var filename = arr[i][4];
78
- var files_ichiran = folderid.getFiles()
79
-
80
- //ファイルがあるかどうか
81
- if ( files_ichiran.hasNext() ){ 
82
- while ( files_ichiran.hasNext() ){
83
-  var attachedfile = files_ichiran.next();
84
-
85
- if ( attachedfile.getName().indexOf(filename) != -1 ){
86
-   /var fileID = attachedfile.getId(); ファイルのIDの取得(ログ出しで確認の為)
87
- //console.log(fileID, 'fileIDは?→取得できている')
88
- //console.log(filename, '添付ファイル名は?→取得できている')
89
-  //添付する
90
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
91
- }
92
- }
93
- }
94
- }else{
95
- }
96
55
 
97
-   if(arr[i][5] != ''){
56
+ //送付先メールアドレスを取得
98
- var filename = arr[i][5];
57
+ var strTo = arr[i][3];
99
- var files_ichiran = folderid.getFiles()
100
-
101
- //ファイルがあるかどうか
102
- if ( files_ichiran.hasNext() ){ 
103
- while ( files_ichiran.hasNext() ){
104
-   var attachedfile = files_ichiran.next();
105
-
106
- if ( attachedfile.getName().indexOf(filename) != -1 ){
107
-    //var fileID = attachedfile.getId(); ファイルのIDの取得(ログ出しで確認の為)
108
- //console.log(fileID, 'fileIDは?→取得できている')
109
- //console.log(filename, '添付ファイル名は?→取得できている')
110
-  //添付する
111
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
112
- }
113
- }
114
- }
115
- }else{
116
- }
117
58
 
59
+ for (var j = 0; j <= 5; j++) {
60
+ //添付ファイル1~5を取得(空白ならスキップ)
118
-   if(arr[i][6] != ''){
61
+ if(arr[i][j + 4] != ''){
119
- var filename = arr[i][6];
62
+ var filename = arr[i][j + 4];
120
- var files_ichiran = folderid.getFiles()
121
-
122
- //ファイルがあるかどうか
123
- if ( files_ichiran.hasNext() ){ 
124
- while ( files_ichiran.hasNext() ){
125
-   var attachedfile = files_ichiran.next();
126
-
127
- if ( attachedfile.getName().indexOf(filename) != -1 ){
128
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
63
+ var files = folder.getFilesByName(filename);
129
- }
130
- }
131
- }
132
- }else{
133
- }
134
64
 
135
-   if(arr[i][7] != ''){
136
- var filename = arr[i][7];
137
- var files_ichiran = folderid.getFiles()
138
-
139
- //ファイルがあるかどうか
65
+ //ファイルがあるかどうか
140
- if ( files_ichiran.hasNext() ){ 
141
- while ( files_ichiran.hasNext() ){
66
+ while (files.hasNext() ){ 
142
-   var attachedfile = files_ichiran.next();
67
+  //添付する
143
-
144
- if ( attachedfile.getName().indexOf(filename) != -1 ){
145
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
68
+ attachmentFiles.push(files.next())
146
- }
69
+ }
147
- }
70
+ }
148
- }
71
+ }
149
- }else{
150
- }
151
-
152
-   if(arr[i][8] != ''){
153
- var filename = arr[i][8];
154
- var files_ichiran = folderid.getFiles()
155
-
156
- //ファイルがあるかどうか
157
- if ( files_ichiran.hasNext() ){ 
158
- while ( files_ichiran.hasNext() ){
159
-   var attachedfile = files_ichiran.next();
160
-
161
- if ( attachedfile.getName().indexOf(filename) != -1 ){
162
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
163
- }
164
- }
165
- }
166
- }else{
167
- }
168
-
169
-   if(arr[i][9] != ''){
170
- var filename = arr[i][9];
171
- var files_ichiran = folderid.getFiles()
172
-
173
- //ファイルがあるかどうか
174
- if ( files_ichiran.hasNext() ){ 
175
- while ( files_ichiran.hasNext() ){
176
-   var attachedfile = files_ichiran.next();
177
-
178
- if ( attachedfile.getName().indexOf(filename) != -1 ){
179
- attachmentFiles.push(folderid[0].getFilesByName(filename).next())
180
- }
181
- }
182
- }
183
- }else{
184
- }
185
72
 
186
73
  //-----------本文の差込データ作成------------
187
74
    // 対象行の差込データを取得
@@ -233,29 +120,15 @@
233
120
  ];
234
121
  sheet.addMenu("スクリプト実行", entries);
235
122
  };
236
-
237
123
  ```
238
-
239
124
  ### 補足情報(FW/ツールのバージョンなど)
240
125
  こちらを参考にしました。
241
126
  [リンク](https://teratail.com/questions/119142)
242
127
 
243
- 添付がズレている点の修正とファイルのあるかどうかを修正しました。(ver1.2
128
+ 添付がズレている点の修正とファイルのあるかどうかを修正しました。(ver1.1
244
129
  実現したいことの文を修正しました。
245
130
 
246
- 修正前の構文 
247
- ```
248
- //フォルダー情報を添付ファイルのフォルダIDで取得
249
- var folders = DriveApp.getFolderById('-----------');
250
- //~省略~
251
-  for(var i = 0, l = arr.length; i < l; i++){
252
-
253
-     if(arr[i][4] != ''){
254
- attachmentFiles.push(folders[0].getFilesByName(arr[i][4]).next());
255
- }
256
-     //以下、arr[i][4]の部分をarr[i][9]まで繰り返し
257
- ```     
258
- 参考スクリプト(ver1.2用)
131
+ 参考スクリプト
259
132
  スプレッドシート上のファイルがあるか判断して削除していく
260
133
  ```
261
134
  function myFunction() {
@@ -281,19 +154,8 @@
281
154
  }
282
155
  }else{}
283
156
  }
284
- //以下、arr[i][0]を変えて繰り返し
157
+ //
285
158
  }
286
159
  }
287
160
  }
288
-
289
- //~以下、開いたときの動作は省略~
290
-
291
- ```
161
+ ```
292
-
293
- ### 全体の運用予定
294
- ソフト、VBAで出力(エクセル,PDF出力したものを最終確認をし、Driveにアップ。既存流用)
295
-
296
- 添付ファイルを探して宛先に送付(今回の作成している部分)
297
-
298
- Drive内ファイル削除(上記参考スクリプト。新規作成)
299
- (同じシートを元にする事で、削除できなかったものは、添付エラーしたものとわかる)

1

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

2020/08/11 14:40

投稿

kiha82
kiha82

スコア1

title CHANGED
File without changes
body CHANGED
@@ -6,18 +6,29 @@
6
6
  フォルダの中に同じファイル名はなく、毎月同じ名前のファイル(ファイル数は異なる)を
7
7
  googleドライブに保存し、それを添付して送りたいです。
8
8
 
9
+ ### 発生している問題
9
10
 
10
- ### 発生している問題・エラーメッセージ
11
-
12
-  現在のスクリプトではメールを送ることはできるのですが、添付ファイルがどのメールでも
11
+ ~~現在のスクリプトではメールを送ることはできるのですが、添付ファイルがどのメールでも
13
- 1つ抜けてしまいます。(添付ファイル1~5まであるうちの1~4までしか送れないです。)
12
+ 1つ抜けてしまいます。(添付ファイル1~5まであるうちの1~4までしか送れないです。)~~
14
-
15
13
   また、ファイル名が添付ファイル名記載のなかで2つ以上存在しない、
16
14
  若しくはファイル名の番号が飛んでいると、そこで動作が停止してしまいます。
17
15
 
16
+ 1,~~添付ファイルが1つ抜けてしまう~~→前回ご回答にて解決することができました。
17
+ 2,対象ファイル名(拡張子付き)がシート記載にあるが、google Drive上にデータが存在するとエラ
18
+  ーが出てしまう。
18
19
 
19
- ### 該当スコード
20
+ ### 今回エラ状況と試したこと
21
+ 1, .getFilesByNameと.getFileByIdともにundefinedと定義されていないと出てきてしまう
22
+ 2, attachmentFilesの部分が修正前の物でも同様のエラーが出てきてしまいます。
20
23
 
24
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
25
+ attachmentFiles.push(folderid[0].getFileById(fileID).next())
26
+ attachmentFiles.push(folderid[0].getFilesByName(arr[i][4]).next())
27
+
28
+ にファイル添付部分を変更したりしましたが、どれもダメでした。
29
+
30
+ ### 該当のソースコード(ver.1.1)
31
+
21
32
  ```
22
33
  function sendMail(){
23
34
 
@@ -52,7 +63,7 @@
52
63
  */
53
64
 
54
65
  //フォルダー情報を添付ファイルのフォルダIDで取得
55
- var folders = [
66
+ var folderid = [
56
67
  DriveApp.getFolderById('----------------------------')
57
68
  ];
58
69
 
@@ -62,21 +73,115 @@
62
73
  var strTo = arr[i][3];
63
74
 
64
75
  //添付ファイル1~5を取得(空白ならスキップ)
76
+ if(arr[i][4] != ''){
77
+ var filename = arr[i][4];
78
+ var files_ichiran = folderid.getFiles()
79
+
80
+ //ファイルがあるかどうか
81
+ if ( files_ichiran.hasNext() ){ 
82
+ while ( files_ichiran.hasNext() ){
83
+  var attachedfile = files_ichiran.next();
84
+
85
+ if ( attachedfile.getName().indexOf(filename) != -1 ){
86
+   /var fileID = attachedfile.getId(); ファイルのIDの取得(ログ出しで確認の為)
87
+ //console.log(fileID, 'fileIDは?→取得できている')
88
+ //console.log(filename, '添付ファイル名は?→取得できている')
89
+  //添付する
90
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
91
+ }
92
+ }
93
+ }
94
+ }else{
95
+ }
96
+
65
- if(arr[i][5] != ''){
97
+   if(arr[i][5] != ''){
98
+ var filename = arr[i][5];
99
+ var files_ichiran = folderid.getFiles()
100
+
101
+ //ファイルがあるかどうか
102
+ if ( files_ichiran.hasNext() ){ 
103
+ while ( files_ichiran.hasNext() ){
104
+   var attachedfile = files_ichiran.next();
105
+
106
+ if ( attachedfile.getName().indexOf(filename) != -1 ){
107
+    //var fileID = attachedfile.getId(); ファイルのIDの取得(ログ出しで確認の為)
108
+ //console.log(fileID, 'fileIDは?→取得できている')
109
+ //console.log(filename, '添付ファイル名は?→取得できている')
110
+  //添付する
66
- attachmentFiles.push(folders[0].getFilesByName(arr[i][4]).next());
111
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
67
- }   
112
+ }
113
+ }
114
+ }
115
+ }else{
116
+ }
117
+
68
- if(arr[i][6] != ''){
118
+   if(arr[i][6] != ''){
119
+ var filename = arr[i][6];
120
+ var files_ichiran = folderid.getFiles()
121
+
122
+ //ファイルがあるかどうか
123
+ if ( files_ichiran.hasNext() ){ 
124
+ while ( files_ichiran.hasNext() ){
125
+   var attachedfile = files_ichiran.next();
126
+
127
+ if ( attachedfile.getName().indexOf(filename) != -1 ){
69
- attachmentFiles.push(folders[0].getFilesByName(arr[i][5]).next());
128
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
129
+ }
130
+ }
131
+ }
70
- }//
132
+ }else{
133
+ }
134
+
71
- if(arr[i][7] != ''){
135
+   if(arr[i][7] != ''){
136
+ var filename = arr[i][7];
137
+ var files_ichiran = folderid.getFiles()
138
+
139
+ //ファイルがあるかどうか
140
+ if ( files_ichiran.hasNext() ){ 
141
+ while ( files_ichiran.hasNext() ){
142
+   var attachedfile = files_ichiran.next();
143
+
144
+ if ( attachedfile.getName().indexOf(filename) != -1 ){
72
- attachmentFiles.push(folders[0].getFilesByName(arr[i][6]).next());
145
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
73
- }
146
+ }
147
+ }
148
+ }
149
+ }else{
150
+ }
151
+
74
- if(arr[i][8] != ''){
152
+   if(arr[i][8] != ''){
153
+ var filename = arr[i][8];
154
+ var files_ichiran = folderid.getFiles()
155
+
156
+ //ファイルがあるかどうか
157
+ if ( files_ichiran.hasNext() ){ 
158
+ while ( files_ichiran.hasNext() ){
159
+   var attachedfile = files_ichiran.next();
160
+
161
+ if ( attachedfile.getName().indexOf(filename) != -1 ){
75
- attachmentFiles.push(folders[0].getFilesByName(arr[i][7]).next());
162
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
76
- }
163
+ }
164
+ }
165
+ }
166
+ }else{
167
+ }
168
+
77
- if(arr[i][9] != ''){
169
+   if(arr[i][9] != ''){
170
+ var filename = arr[i][9];
171
+ var files_ichiran = folderid.getFiles()
172
+
173
+ //ファイルがあるかどうか
174
+ if ( files_ichiran.hasNext() ){ 
175
+ while ( files_ichiran.hasNext() ){
176
+   var attachedfile = files_ichiran.next();
177
+
178
+ if ( attachedfile.getName().indexOf(filename) != -1 ){
78
- attachmentFiles.push(folders[0].getFilesByName(arr[i][8]).next());
179
+ attachmentFiles.push(folderid[0].getFilesByName(filename).next())
79
- }
180
+ }
181
+ }
182
+ }
183
+ }else{
184
+ }
80
185
 
81
186
  //-----------本文の差込データ作成------------
82
187
    // 対象行の差込データを取得
@@ -131,10 +236,64 @@
131
236
 
132
237
  ```
133
238
 
134
- ### 試したこと
135
- var arr の部分でデータが取得できていることログで確認しています。
136
- For 以下の添付部分が上手く動かず、その後の文章差込と送信はできます。
137
-
138
239
  ### 補足情報(FW/ツールのバージョンなど)
139
240
  こちらを参考にしました。
140
- [リンク](https://teratail.com/questions/119142)
241
+ [リンク](https://teratail.com/questions/119142)
242
+
243
+ 添付がズレている点の修正とファイルのあるかどうかを修正しました。(ver1.2)
244
+ 実現したいことの文を修正しました。
245
+
246
+ 修正前の構文 
247
+ ```
248
+ //フォルダー情報を添付ファイルのフォルダIDで取得
249
+ var folders = DriveApp.getFolderById('-----------');
250
+ //~省略~
251
+  for(var i = 0, l = arr.length; i < l; i++){
252
+
253
+     if(arr[i][4] != ''){
254
+ attachmentFiles.push(folders[0].getFilesByName(arr[i][4]).next());
255
+ }
256
+     //以下、arr[i][4]の部分をarr[i][9]まで繰り返し
257
+ ```     
258
+ 参考スクリプト(ver1.2用)
259
+ スプレッドシート上のファイルがあるか判断して削除していく
260
+ ```
261
+ function myFunction() {
262
+  var folderid = DriveApp.getFolderById('-----------'); 
263
+ var book = SpreadsheetApp.getActiveSpreadsheet();
264
+ var Atesakisheet = book.getSheetByName("宛先リスト");
265
+ var lastRow = Atesakisheet.getLastRow();
266
+ var arr = Atesakisheet.getRange(2, 5, lastRow - 1 , 12).getValues();
267
+  
268
+ for(var i = 0, l = arr.length; i < l; i++){
269
+
270
+ if(arr[i][0] != ''){
271
+ var filesname = arr[i][0]
272
+ var files_ichiran = folderid.getFiles();
273
+ if ( files_ichiran.hasNext() ){ 
274
+ while ( files_ichiran.hasNext() ){ 
275
+ var deletefiles = files_ichiran.next();
276
+ if ( deletefiles.getName().indexOf(arr[i][0]) != -1 ){
277
+ var deletefiles = deletefiles.getId(); 
278
+ var deletefile = DriveApp.getFileById(deletefiles); 
279
+ deletefile.setTrashed(true);
280
+ }
281
+ }
282
+ }else{}
283
+ }
284
+ //以下、arr[i][0]を変えて繰り返し
285
+ }
286
+ }
287
+ }
288
+
289
+ //~以下、開いたときの動作は省略~
290
+
291
+ ```
292
+
293
+ ### 全体の運用予定
294
+ ソフト、VBAで出力(エクセル,PDF出力したものを最終確認をし、Driveにアップ。既存流用)
295
+
296
+ 添付ファイルを探して宛先に送付(今回の作成している部分)
297
+
298
+ Drive内ファイル削除(上記参考スクリプト。新規作成)
299
+ (同じシートを元にする事で、削除できなかったものは、添付エラーしたものとわかる)