質問編集履歴

2

試したことの②を追加

2020/03/01 17:50

投稿

veruvi
veruvi

スコア5

test CHANGED
File without changes
test CHANGED
@@ -188,7 +188,11 @@
188
188
 
189
189
 
190
190
 
191
- UNIQUEなどの関数を使っていて、消してみると使用できたりしたのですが、何度も計算するうちに打つ手を施してもエラーでなにもできなくなりました
191
+ UNIQUEなどの関数を使っていて、消してみると使用できたりしたのですが、何度も計算するうちに打つ手を施してもエラーでなにもできなくなりました
192
+
193
+ ②なぜか読み込み元のファイルコピーして生成するとなぜか成功するが、2度目の読み込みで失敗したりします
194
+
195
+ 「コピーすりゃいけんじゃん!?」と思って同じ手法をやると成功しなくなります
192
196
 
193
197
 
194
198
 

1

不要な```の削除とエラー場所に「←ここ」を追加

2020/03/01 17:49

投稿

veruvi
veruvi

スコア5

test CHANGED
File without changes
test CHANGED
@@ -36,148 +36,148 @@
36
36
 
37
37
  ``` var lastRow = outputSheet.getLastRow()+1;
38
38
 
39
+ outputSheet.getRange(curRow, 1, lastRow-curRow, 1) ←ここ
40
+
41
+ .setValue(id); // 識別子の書き込み
42
+
43
+ curRow = lastRow;
44
+
45
+
46
+
47
+ ```
48
+
49
+
50
+
51
+ ### コード全文
52
+
53
+
54
+
55
+ ```// Sidebar.htmlをテンプレートにHTMLServiceを生成
56
+
57
+ // Sidebar.htmlが必要
58
+
59
+ function showSidebar() {
60
+
61
+ var ui = HtmlService.createTemplateFromFile('Sidebar')
62
+
63
+ .evaluate()
64
+
65
+ .setTitle("シート集計");
66
+
67
+ SpreadsheetApp.getUi().showSidebar(ui);
68
+
69
+ }
70
+
71
+
72
+
73
+ // スプレッドシートを開いたときに呼ばれる
74
+
75
+ function onOpen() {
76
+
77
+ showSidebar();
78
+
79
+ }
80
+
81
+
82
+
83
+ // 集計対象フォルダ以下のファイルを集計
84
+
85
+ function aggregateData() {
86
+
87
+ var cfg = getConfig();
88
+
89
+ var targetFolder = DriveApp.getFoldersByName(cfg['集計対象フォルダ']).next();
90
+
91
+ var files = targetFolder.getFiles();
92
+
93
+ Logger.log(files);
94
+
95
+
96
+
97
+ var outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(cfg['書き込み先シート']);
98
+
99
+ if (! outputSheet) {
100
+
101
+ var sheetName = String(cfg['書き込み先シート']);
102
+
103
+ Logger.log(sheetName);
104
+
105
+ outputSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(sheetName);
106
+
107
+ }
108
+
109
+ outputSheet.clear();
110
+
111
+
112
+
113
+ var curRow = 1;
114
+
115
+ var fileList = [];
116
+
117
+ while(files.hasNext()){
118
+
119
+ var file = files.next();
120
+
121
+
122
+
123
+ var spreadsheet = SpreadsheetApp.open(file);
124
+
125
+ var sheet = spreadsheet.getSheets()[0];
126
+
127
+ var id = sheet.getRange(cfg['識別子']).getValue();
128
+
129
+ fileList.push( { "fileName": file.getName(), "id": id } );
130
+
131
+
132
+
133
+ var srcRange = sheet.getRange(cfg['読み込み領域']);
134
+
135
+ outputSheet.getRange(curRow, 2, srcRange.getHeight(), srcRange.getWidth())
136
+
137
+ .setValues(srcRange.getValues());
138
+
139
+
140
+
141
+ var lastRow = outputSheet.getLastRow()+1;
142
+
39
143
  outputSheet.getRange(curRow, 1, lastRow-curRow, 1)
40
144
 
41
145
  .setValue(id); // 識別子の書き込み
42
146
 
43
- curRow = lastRow;```
147
+ curRow = lastRow;
44
-
45
-
46
-
47
- ```
148
+
48
-
49
-
50
-
51
- ### コード全文
149
+
52
-
53
-
54
-
55
- ```// Sidebar.htmlをテンプレートにHTMLServiceを生成
56
-
57
- // Sidebar.htmlが必要
58
-
59
- function showSidebar() {
60
-
61
- var ui = HtmlService.createTemplateFromFile('Sidebar')
62
-
63
- .evaluate()
64
-
65
- .setTitle("シート集計");
66
-
67
- SpreadsheetApp.getUi().showSidebar(ui);
68
-
69
- }
70
-
71
-
72
-
73
- // スプレッドシートを開いたときに呼ばれる
74
-
75
- function onOpen() {
76
-
77
- showSidebar();
78
-
79
- }
80
-
81
-
82
-
83
- // 集計対象フォルダ以下のファイルを集計
84
-
85
- function aggregateData() {
86
-
87
- var cfg = getConfig();
88
-
89
- var targetFolder = DriveApp.getFoldersByName(cfg['集計対象フォルダ']).next();
90
-
91
- var files = targetFolder.getFiles();
92
-
93
- Logger.log(files);
94
-
95
-
96
-
97
- var outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(cfg['書き込み先シート']);
98
-
99
- if (! outputSheet) {
100
-
101
- var sheetName = String(cfg['書き込み先シート']);
102
-
103
- Logger.log(sheetName);
104
-
105
- outputSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(sheetName);
106
150
 
107
151
  }
108
152
 
153
+
154
+
155
+ return fileList;
156
+
157
+ }
158
+
159
+
160
+
161
+ // 集計設定という名前のシートを読み込んで key-valueに落とし込む
162
+
109
- outputSheet.clear();
163
+ function getConfig() {
164
+
110
-
165
+ var ss = SpreadsheetApp.getActiveSpreadsheet();
166
+
111
-
167
+ var cfgSheet = ss.getSheetByName("集計設定");
168
+
112
-
169
+ var cfgValues = cfgSheet.getDataRange().getValues();
170
+
113
- var curRow = 1;
171
+ var cfg = {};
114
-
115
- var fileList = [];
172
+
116
-
117
- while(files.hasNext()){
173
+
118
-
119
- var file = files.next();
174
+
120
-
121
-
122
-
123
- var spreadsheet = SpreadsheetApp.open(file);
124
-
125
- var sheet = spreadsheet.getSheets()[0];
175
+ for (var i=0; i<cfgValues.length; i++) {
126
-
127
- var id = sheet.getRange(cfg['識別子']).getValue();
176
+
128
-
129
- fileList.push( { "fileName": file.getName(), "id": id } );
130
-
131
-
132
-
133
- var srcRange = sheet.getRange(cfg['読み込み領域']);
134
-
135
- outputSheet.getRange(curRow, 2, srcRange.getHeight(), srcRange.getWidth())
136
-
137
- .setValues(srcRange.getValues());
177
+ cfg[cfgValues[i][0]] = String(cfgValues[i][1]);
138
-
139
-
140
-
141
- var lastRow = outputSheet.getLastRow()+1;
142
-
143
- outputSheet.getRange(curRow, 1, lastRow-curRow, 1)
144
-
145
- .setValue(id); // 識別子の書き込み
146
-
147
- curRow = lastRow;
148
-
149
-
150
178
 
151
179
  }
152
180
 
153
-
154
-
155
- return fileList;
156
-
157
- }
158
-
159
-
160
-
161
- // 集計設定という名前のシートを読み込んで key-valueに落とし込む
162
-
163
- function getConfig() {
164
-
165
- var ss = SpreadsheetApp.getActiveSpreadsheet();
166
-
167
- var cfgSheet = ss.getSheetByName("集計設定");
168
-
169
- var cfgValues = cfgSheet.getDataRange().getValues();
170
-
171
- var cfg = {};
172
-
173
-
174
-
175
- for (var i=0; i<cfgValues.length; i++) {
176
-
177
- cfg[cfgValues[i][0]] = String(cfgValues[i][1]);
178
-
179
- }
180
-
181
181
  return cfg;
182
182
 
183
183
  }