回答編集履歴

2

a

2020/01/24 14:10

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -1,3 +1,57 @@
1
+ A 列のみ参照
2
+
3
+ ```javascript
4
+
5
+ function createFolders() {
6
+
7
+ const sheet = SpreadsheetApp.getActiveSheet();
8
+
9
+ const folderID = "IDを記入しています";
10
+
11
+ const colA = 0;
12
+
13
+
14
+
15
+ const folder = DriveApp.getFolderById(folderID);
16
+
17
+ const existingChildren = getFolderNames(folder);
18
+
19
+ const colAunique = sheet.getDataRange().getValues().map(function(e) { return e[0];}).filter(function(e,i,a) { return a.indexOf(e) === i;})
20
+
21
+ colAunique.forEach(function(e) {
22
+
23
+ if(existingChildren.indexOf(e) > -1) return;
24
+
25
+ folder.createFolder(e);});
26
+
27
+ }
28
+
29
+ function getFolderNames(folder) {
30
+
31
+ const iter = folder.getFolders();
32
+
33
+ var ret = [];
34
+
35
+ while(iter.hasNext()) {
36
+
37
+ var child = iter.next();
38
+
39
+ ret.push(child.getName());
40
+
41
+ }
42
+
43
+ return ret;
44
+
45
+ }
46
+
47
+ ```
48
+
49
+
50
+
51
+ ---
52
+
53
+
54
+
1
55
  lastRowで処理しているので、重複が省かれてAより短くなったC列の空セルから空文字列が取得されてしまい、無名フォルダを作ろうとした結果デフォルト名で作成されていると推測。
2
56
 
3
57
 

1

2020/01/24 14:10

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -9,3 +9,25 @@
9
9
  2回目以降同じ名前のフォルダがどうなるかは考えてない。
10
10
 
11
11
  (エラーになるならtry catchすればいいが、同じ名前があるとnew Folderにフォールバックされるとなると厄介)
12
+
13
+
14
+
15
+ ```javascript
16
+
17
+ //A列にデータ入力・C列に「=UNIQUE('シート1'!A2:A)」としてデータを抜き出しています。
18
+
19
+
20
+
21
+ var lastRow = sh.getLastRow();
22
+
23
+ var folderNamesToCreate = sh.getRange(2,3,lastRow-1,1).getValues();
24
+
25
+ for (var i = 0; i < folderNamesToCreate.length; i++){
26
+
27
+ if(folderNamesToCreate[i] === "") continue; //これ
28
+
29
+ folder.createFolder(folderNamesToCreate[i]);
30
+
31
+ }
32
+
33
+ ```