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

回答編集履歴

3

修正

2019/02/04 03:26

投稿

papinianus
papinianus

スコア12705

answer CHANGED
@@ -61,7 +61,7 @@
61
61
  Logger.log(latestPaidHour);
62
62
  return latestPaidHour; //here forの意味がなさそうなのでやめた
63
63
  });
64
- SpreadsheetApp.getActiveSheet.getRange(1,1,1,sheet.length).setValues(sheet);
64
+ SpreadsheetApp.getActiveSheet.getRange(1,1,1,sheet.length).setValues([sheet]);
65
65
  //here 最初の1,1はA1。3つめの1は、どうも1回の操作で横一列しか取らないっぽい。ので固定値。
66
66
  Logger.log(sheet);
67
67
  }

2

修正

2019/02/04 03:26

投稿

papinianus
papinianus

スコア12705

answer CHANGED
@@ -56,13 +56,13 @@
56
56
  var sht= SpreadsheetApp.openById(element);
57
57
  var st = sht.getActiveSheet();
58
58
  var array = [];
59
- var latestPaidHour = st.getRange( 1,1 ).getValues();
59
+ var latestPaidHour = st.getRange( 1,1 ).getValue(); //here getValuesをgetValueに変更
60
60
  latestPaidHour = latestPaidHour.toString();
61
- for ( var i = 0; i < latestPaidHour.length; i++ ){
62
- return array.push(latestPaidHour); //ここ0しか取れてないけどいいの?
63
- }
64
61
  Logger.log(latestPaidHour);
62
+ return latestPaidHour; //here forの意味がなさそうなのでやめた
65
63
  });
64
+ SpreadsheetApp.getActiveSheet.getRange(1,1,1,sheet.length).setValues(sheet);
65
+ //here 最初の1,1はA1。3つめの1は、どうも1回の操作で横一列しか取らないっぽい。ので固定値。
66
66
  Logger.log(sheet);
67
67
  }
68
68
  ```

1

修正

2019/02/04 03:07

投稿

papinianus
papinianus

スコア12705

answer CHANGED
@@ -19,4 +19,50 @@
19
19
  0. ファイル名の重複がおこらないようなルール(同姓だと重複する)にして、ファイルidの探査をやめる
20
20
  (余談ですが、getFilesByNameはフォルダ無視して検索してくれるので、もし姓が重複しないなら、`DriveApp.getFilesByName`とすることで、現在のコードでもフォルダを無視して取得可能なはず)
21
21
  0. ファイルidやフォルダidはあらかじめ、管理シートに記録しておく(プログラムを書く)
22
- (こちらは絶対量としてかかる時間はへらないのですが、例えば夜間に時間のかかる処理を逃がしておいて、ユーザが操作する時には応答を速くするという考えです。まあそもそも全体を夜間に処理したらいいのかもしれませんが)
22
+ (こちらは絶対量としてかかる時間はへらないのですが、例えば夜間に時間のかかる処理を逃がしておいて、ユーザが操作する時には応答を速くするという考えです。まあそもそも全体を夜間に処理したらいいのかもしれませんが)
23
+
24
+ ---
25
+ 今のコードの意味を(多分)破綻させないように縮約してみました。
26
+ ```javascript
27
+ function paidHolidaySet(){
28
+
29
+ //社員を配列データとして格納
30
+ var users = [ 'akito','fujisawa','inoue'];
31
+ var fileIDs = users.map(function(element) {
32
+
33
+ //月末lmld=lastmonthlastday
34
+ var dt = new Date();
35
+ var lmld = new Date(dt.getFullYear(), dt.getMonth(), 0)
36
+
37
+ // YYYYMMDD形式に変換
38
+ var year_str = lmld.getFullYear();
39
+ var month_str = lmld.getMonth()+ 1; // monthはなんと0-11
40
+ var day_str = lmld.getDate();
41
+
42
+ var month_str = ('0' + month_str).slice(-2);
43
+ var day_str = ('0' + day_str).slice(-2);
44
+ return "作業月報_" + element + "_" + year_str + month_str + day_str;
45
+ })
46
+ .map(function(element){
47
+ //フォルダー名をドライブから検索し、IDを取得
48
+ var folderID = DriveApp.getFoldersByName(element).next().getId();
49
+ // Logger.log(folderID);
50
+ return DriveApp.getFolderById(folderID).getFilesByName(element).next().getId();
51
+ });
52
+  Logger.log(fileIDs);
53
+
54
+ //スプレッドシートアプリから取得したIDのスプレッドシートを起動し、アクティブシート取得
55
+ var sheet = fileIDs.map(function(element){
56
+ var sht= SpreadsheetApp.openById(element);
57
+ var st = sht.getActiveSheet();
58
+ var array = [];
59
+ var latestPaidHour = st.getRange( 1,1 ).getValues();
60
+ latestPaidHour = latestPaidHour.toString();
61
+ for ( var i = 0; i < latestPaidHour.length; i++ ){
62
+ return array.push(latestPaidHour); //ここ0しか取れてないけどいいの?
63
+ }
64
+ Logger.log(latestPaidHour);
65
+ });
66
+ Logger.log(sheet);
67
+ }
68
+ ```