回答編集履歴

3

修正

2019/02/04 03:26

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -124,7 +124,7 @@
124
124
 
125
125
  });
126
126
 
127
- SpreadsheetApp.getActiveSheet.getRange(1,1,1,sheet.length).setValues(sheet);
127
+ SpreadsheetApp.getActiveSheet.getRange(1,1,1,sheet.length).setValues([sheet]);
128
128
 
129
129
  //here 最初の1,1はA1。3つめの1は、どうも1回の操作で横一列しか取らないっぽい。ので固定値。
130
130
 

2

修正

2019/02/04 03:26

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -114,19 +114,19 @@
114
114
 
115
115
  var array = [];
116
116
 
117
- var latestPaidHour = st.getRange( 1,1 ).getValues();
117
+ var latestPaidHour = st.getRange( 1,1 ).getValue(); //here getValuesをgetValueに変更
118
118
 
119
119
  latestPaidHour = latestPaidHour.toString();
120
120
 
121
- for ( var i = 0; i < latestPaidHour.length; i++ ){
122
-
123
- return array.push(latestPaidHour); //ここ0しか取れてないけどいいの?
124
-
125
- }
126
-
127
121
  Logger.log(latestPaidHour);
128
122
 
123
+ return latestPaidHour; //here forの意味がなさそうなのでやめた
124
+
129
125
  });
126
+
127
+ SpreadsheetApp.getActiveSheet.getRange(1,1,1,sheet.length).setValues(sheet);
128
+
129
+ //here 最初の1,1はA1。3つめの1は、どうも1回の操作で横一列しか取らないっぽい。ので固定値。
130
130
 
131
131
  Logger.log(sheet);
132
132
 

1

修正

2019/02/04 03:07

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -41,3 +41,95 @@
41
41
  0. ファイルidやフォルダidはあらかじめ、管理シートに記録しておく(プログラムを書く)
42
42
 
43
43
  (こちらは絶対量としてかかる時間はへらないのですが、例えば夜間に時間のかかる処理を逃がしておいて、ユーザが操作する時には応答を速くするという考えです。まあそもそも全体を夜間に処理したらいいのかもしれませんが)
44
+
45
+
46
+
47
+ ---
48
+
49
+ 今のコードの意味を(多分)破綻させないように縮約してみました。
50
+
51
+ ```javascript
52
+
53
+ function paidHolidaySet(){
54
+
55
+
56
+
57
+ //社員を配列データとして格納
58
+
59
+ var users = [ 'akito','fujisawa','inoue'];
60
+
61
+ var fileIDs = users.map(function(element) {
62
+
63
+
64
+
65
+ //月末lmld=lastmonthlastday
66
+
67
+ var dt = new Date();
68
+
69
+ var lmld = new Date(dt.getFullYear(), dt.getMonth(), 0)
70
+
71
+
72
+
73
+ // YYYYMMDD形式に変換
74
+
75
+ var year_str = lmld.getFullYear();
76
+
77
+ var month_str = lmld.getMonth()+ 1; // monthはなんと0-11
78
+
79
+ var day_str = lmld.getDate();
80
+
81
+
82
+
83
+ var month_str = ('0' + month_str).slice(-2);
84
+
85
+ var day_str = ('0' + day_str).slice(-2);
86
+
87
+ return "作業月報_" + element + "_" + year_str + month_str + day_str;
88
+
89
+ })
90
+
91
+ .map(function(element){
92
+
93
+ //フォルダー名をドライブから検索し、IDを取得
94
+
95
+ var folderID = DriveApp.getFoldersByName(element).next().getId();
96
+
97
+ // Logger.log(folderID);
98
+
99
+ return DriveApp.getFolderById(folderID).getFilesByName(element).next().getId();
100
+
101
+ });
102
+
103
+  Logger.log(fileIDs);
104
+
105
+
106
+
107
+ //スプレッドシートアプリから取得したIDのスプレッドシートを起動し、アクティブシート取得
108
+
109
+ var sheet = fileIDs.map(function(element){
110
+
111
+ var sht= SpreadsheetApp.openById(element);
112
+
113
+ var st = sht.getActiveSheet();
114
+
115
+ var array = [];
116
+
117
+ var latestPaidHour = st.getRange( 1,1 ).getValues();
118
+
119
+ latestPaidHour = latestPaidHour.toString();
120
+
121
+ for ( var i = 0; i < latestPaidHour.length; i++ ){
122
+
123
+ return array.push(latestPaidHour); //ここ0しか取れてないけどいいの?
124
+
125
+ }
126
+
127
+ Logger.log(latestPaidHour);
128
+
129
+ });
130
+
131
+ Logger.log(sheet);
132
+
133
+ }
134
+
135
+ ```