質問編集履歴

2

更新後のコード

2019/07/04 07:05

投稿

efuji
efuji

スコア12

test CHANGED
File without changes
test CHANGED
@@ -26,27 +26,33 @@
26
26
 
27
27
  ```ここに言語を入力
28
28
 
29
- var TARGET_FOLDER_ID = "xxxxx";
29
+ var TARGET_FOLDER_ID = "xxx";
30
30
 
31
- var UPDATE_SHEET_ID = "xxxxx";
31
+ var UPDATE_SHEET_ID = "xxxx";
32
32
 
33
- var UPDATE_SHEET_NAME = "xxxx;
33
+ var UPDATE_SHEET_NAME = "sheet";
34
34
 
35
- var SEND_MAIL_ADDRESS = ["xxx"]
35
+ var SEND_MAIL_ADDRESS = ["xxx@xxx"]
36
36
 
37
37
 
38
38
 
39
39
  function updateCheck() {
40
40
 
41
+
42
+
43
+
44
+
45
+ // 対象フォルダ配下のファイル最終更新日時を取得。
46
+
47
+ var lastUpdateMap = {};
48
+
49
+
50
+
51
+ function filesearch(TARGET_FOLDER_ID) {
52
+
41
53
  var targetFolder = DriveApp.getFolderById(TARGET_FOLDER_ID);
42
54
 
43
55
  var files = targetFolder.getFiles();
44
-
45
-
46
-
47
- // 対象フォルダ配下のファイル最終更新日時を取得。
48
-
49
- var lastUpdateMap = {};
50
56
 
51
57
  while (files.hasNext()) {
52
58
 
@@ -56,9 +62,29 @@
56
62
 
57
63
  }
58
64
 
65
+ var folders = DriveApp.searchFolders("'" + TARGET_FOLDER_ID + "' in parents");
66
+
67
+ while (folders.hasNext()) {
68
+
69
+ var folder = folders.next();
70
+
71
+    lastUpdateMap[folder.getName()] = folder.getDateCreated();
72
+
73
+ filesearch(folder.getId());
74
+
75
+ }
76
+
77
+ }
78
+
79
+
80
+
81
+ filesearch();
59
82
 
60
83
 
84
+
85
+
86
+
61
- // スプレッドシート記載ファイル名と更新日時を取得。
87
+ // スプレッドシート記載されているファイル名と更新日時を取得。
62
88
 
63
89
  var spreadsheet = SpreadsheetApp.openById(UPDATE_SHEET_ID);
64
90
 
@@ -68,11 +94,11 @@
68
94
 
69
95
 
70
96
 
71
- // Mapに変換
97
+ // 取得したデータをMapに変換
72
98
 
73
99
  var sheetData = {};
74
100
 
75
- // 2からstart。
101
+ // 説明とヘッダを記載しているため2からstart。
76
102
 
77
103
  for (var i = 2; i < data.length; i++) {
78
104
 
@@ -90,11 +116,13 @@
90
116
 
91
117
  if(key in sheetData) {
92
118
 
119
+ // ファイル名がシートに存在する場合。
120
+
93
121
  if(lastUpdateMap[key] > sheetData[key].lastUpdate) {
94
122
 
95
123
  // フォルダが更新されている場合。
96
124
 
97
- sheet.getRange(sheetData[key].rowNo, 2).setValue(lastUpdateMap[key]);
125
+ sheet.getRange(sheetData[key].rowNo, 3).setValue(lastUpdateMap[key]);
98
126
 
99
127
  updateFolderList.push(key);
100
128
 
@@ -102,9 +130,11 @@
102
130
 
103
131
  } else {
104
132
 
133
+ // ファイル名がシートに存在しない場合。
134
+
105
135
  sheet.getRange(sheet.getLastRow() + 1, 1).setValue(key);
106
136
 
107
- sheet.getRange(sheet.getLastRow(), 2).setValue(lastUpdateMap[key]);
137
+ sheet.getRange(sheet.getLastRow(), 3).setValue(lastUpdateMap[key]);
108
138
 
109
139
  updateFolderList.push(key);
110
140
 
@@ -114,17 +144,19 @@
114
144
 
115
145
 
116
146
 
117
- // 更新された情報をメール送信。
147
+ // 新規及び更新された情報をメール送信。
118
148
 
119
149
  if (updateFolderList.length != 0) {
120
150
 
121
151
  SEND_MAIL_ADDRESS.forEach(function(o,i) {
122
152
 
123
- MailApp.sendEmail(SEND_MAIL_ADDRESS[i],"ファイル追加",
153
+ MailApp.sendEmail(SEND_MAIL_ADDRESS[i],"追加通知",
124
154
 
125
- "以下のファイル使いされました" + "\n" +
155
+ "写真追加されました" + "\n" +
126
156
 
157
+ "追加されたファイルは以下の通りです。" + "\n" +
158
+
127
- updateFolderList.join("\n")
159
+ updateFolderList.join("\n") + "\n\n"
128
160
 
129
161
  );
130
162
 

1

試したことのURLを変更

2019/07/04 07:05

投稿

efuji
efuji

スコア12

test CHANGED
File without changes
test CHANGED
@@ -30,9 +30,9 @@
30
30
 
31
31
  var UPDATE_SHEET_ID = "xxxxx";
32
32
 
33
- var UPDATE_SHEET_NAME = "シート1;
33
+ var UPDATE_SHEET_NAME = "xxxx;
34
34
 
35
- var SEND_MAIL_ADDRESS = ["xxx@xxx.com"]
35
+ var SEND_MAIL_ADDRESS = ["xxx"]
36
36
 
37
37
 
38
38
 
@@ -140,8 +140,8 @@
140
140
 
141
141
  ### 試したこと
142
142
 
143
-
144
-
145
143
  https://ctrlq.org/code/20034-search-drive-files
146
144
 
145
+ https://stackoverflow.com/questions/36577071/search-files-inside-sub-folders-in-google-drive
146
+
147
147
  などを見たのですが、私の技量では理解できませんでした。