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

回答編集履歴

3

a

2019/05/22 12:59

投稿

papinianus
papinianus

スコア12705

answer CHANGED
@@ -3,7 +3,7 @@
3
3
  const dest = SpreadsheetApp.openById('コピー先ID');
4
4
  const sheetName = 'シート一覧';
5
5
  const folderName = '翻訳元_未コピー';
6
- pickSpreadsheetInFolderNamed(folderName).forEach(function (e) { copyAll(dest, e); });
6
+ pickSpreadsheetInFolderNamed(folderName).forEach(function (e) { copyAll(dest, SpreadsheetApp.open(e)); });
7
7
  resetSheetIndexSheet(dest, sheetName);
8
8
  }
9
9
  function pickSpreadsheetInFolderNamed(name) {

2

2019/05/22 12:59

投稿

papinianus
papinianus

スコア12705

answer CHANGED
@@ -33,7 +33,8 @@
33
33
  function resetSheetIndexSheet(spreadsheet, sheetName) {
34
34
  const sheet = upsertSheet(spreadsheet, sheetName);
35
35
  sheet.clear();
36
- const dat = spreadsheet.getSheets().map(function (e) { return [e.getSheetName(), e.getSheetId()]; }).filter(function (e) { return e[0] !== sheetName; });
36
+ //const dat = spreadsheet.getSheets().map(function (e) { return [e.getSheetName(), e.getSheetId()]; }).filter(function (e) { return e[0] !== sheetName; });
37
+ const dat = spreadsheet.getSheets().map(function (e) { return [e.getSheetName(),]; }).filter(function (e) { return e[0] !== sheetName; });
37
- sheet.getRange(1, 1, dat.length, 2).setValues(dat);
38
+ sheet.getRange(1, 1, dat.length, dat[0].length).setValues(dat);
38
39
  }
39
40
  ```

1

2019/05/21 04:19

投稿

papinianus
papinianus

スコア12705

answer CHANGED
@@ -1,19 +1,39 @@
1
1
  ```javascript
2
- function q189933() {
2
+ function procedure() {
3
- const destination = SpreadsheetApp.openById('コピー先ID');
3
+ const dest = SpreadsheetApp.openById('コピー先ID');
4
+ const sheetName = 'シート一覧';
5
+ const folderName = '翻訳元_未コピー';
6
+ pickSpreadsheetInFolderNamed(folderName).forEach(function (e) { copyAll(dest, e); });
7
+ resetSheetIndexSheet(dest, sheetName);
8
+ }
9
+ function pickSpreadsheetInFolderNamed(name) {
10
+ var files = [];
11
+ const folderIter = DriveApp.getFoldersByName(name);
12
+ while (folderIter.hasNext()) {
13
+ var folder = folderIter.next();
4
- SpreadsheetApp.openById('元のファイルID').getSheets().forEach(
14
+ var fileIter = folder.getFilesByType('application/vnd.google-apps.spreadsheet');
5
- function(e) {
15
+ while (fileIter.hasNext()) {
6
- e.copyTo(destination);
16
+ files.push(fileIter.next());
17
+ }
7
18
  }
8
- );
19
+ return files;
9
20
  }
21
+ function copyAll(destSpreadsheet, sourceSpreadsheet) {
22
+ sourceSpreadsheet.getSheets().forEach(
10
- function q189933_() {
23
+ function (e) {
11
- SpreadsheetApp.openById('コピー先ID').insertSheet('Sheet List', 0);
24
+ e.copyTo(destSpreadsheet).setName(e.getName());
25
+ }
26
+ );
12
27
  }
13
- function q189933__() {
28
+ function upsertSheet(spreadsheet, sheetName) {
14
- const sheet = SpreadsheetApp.openById('コピー先ID').getSheetByName('Sheet List');
29
+ const sheet = spreadsheet.getSheetByName(sheetName);
15
- sheet.clear();
30
+ if (sheet !== null) { return sheet; }
16
- const dat = SpreadsheetApp.openById('コピー先ID').getSheets().map(function(e){return [e.getSheetName(), e.getSheetId()];}).filter(function(e){return e[0] !== 'Sheet List';});
31
+ return spreadsheet.insertSheet(sheetName, 0); //0が挿入位置を示しており、先頭。移動の必要はないと考えた(https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#insertSheet(String,Integer))
17
- sheet.getRange(1, 1, dat.length, 2).setValues(dat);
18
32
  }
33
+ function resetSheetIndexSheet(spreadsheet, sheetName) {
34
+ const sheet = upsertSheet(spreadsheet, sheetName);
35
+ sheet.clear();
36
+ const dat = spreadsheet.getSheets().map(function (e) { return [e.getSheetName(), e.getSheetId()]; }).filter(function (e) { return e[0] !== sheetName; });
37
+ sheet.getRange(1, 1, dat.length, 2).setValues(dat);
38
+ }
19
39
  ```