前提・実現したいこと
#### 前提
わたしはプログラミング初心者で、毎日ググりながら、問題を解決を考える程度のスペックの持ち主です。
本当に初心者なので、全くいいプログラミングの書き方ではないのは百も承知ですが、だからこそ皆さんのお力をお借りできればと思います。
#### 現状
現在社内の業務効率化に向けてスプレッドシートの改良を行っています。
社員が毎月各スプレッドシートで勤務時間を記入するシートがあり、各々から数値を確認し、確からしいかチェックした後に、一括管理するスプレッドシートにコピペをします。
そのコピペの作業が面倒なので、一括管理するスプレッドシートからボタン一つで各スプレッドシートの特定のセルにある情報を吸い上げて、一覧にそのまま数値を反映させたいと思います。
数値を吸い上げるまではかなったのですが、それらを一括管理するスプレッドシートに反映させるのに困っています。
発生している問題・エラーメッセージ
エラーは出ていませんが、吸い上げたデータを配列に格納したいのですが、どうすればいいのかわかりません。
該当のソースコード
以下で、各社員のスプレッドシートが保存されているファイルを先月の月末の数字で名付けてあり、各社員のファイルは、作業月報_社員の苗字_月末の数字という名付け方です。
1 function paidHolidaySet(){ 2 3 //社員を配列データとして格納 4 var users = [ 'akito','fujisawa','inoue']; 5 var file_names = users.map(function(element) { 6 7 //月末lmld=lastmonthlastday 8 var dt = new Date(); 9 var lmld = new Date(dt.getFullYear(), dt.getMonth(), 0) 10 11 // YYYYMMDD形式に変換 12 var year_str = lmld.getFullYear(); 13 var month_str = lmld.getMonth()+ 1; // monthはなんと0-11 14 var day_str = lmld.getDate(); 15 16 var month_str = ('0' + month_str).slice(-2); 17 var day_str = ('0' + day_str).slice(-2); 18 19 var format_str = 'YYYYMMDD'; 20 format_str = format_str.replace(/YYYY/g, year_str); 21 format_str = format_str.replace(/MM/g, month_str); 22 format_str = format_str.replace(/DD/g, day_str); 23 24 return "作業月報_" + element + "_" + format_str; 25 }); 26 27 Logger.log(file_names); 28 29 //フォルダーの中にある各ファイルにアクセスし、IDを取得 30 var fileIDs = file_names.map(function(element){ 31 //ファイル名をユーザー名・月末で指定する 32 //月末lmld=lastmonthlastday 33 var dt = new Date(); 34 var lmld = new Date(dt.getFullYear(), dt.getMonth(), 0) 35 36 // YYYYMMDD形式に変換 37 var year_str = lmld.getFullYear(); 38 var month_str = lmld.getMonth()+ 1; // monthはなんと0-11 39 var day_str = lmld.getDate(); 40 41 var month_str = ('0' + month_str).slice(-2); 42 var day_str = ('0' + day_str).slice(-2); 43 44 var format_str = 'YYYYMMDD'; 45 format_str = format_str.replace(/YYYY/g, year_str); 46 format_str = format_str.replace(/MM/g, month_str); 47 format_str = format_str.replace(/DD/g, day_str); 48 //フォルダーの名前を指定 49 var folderName = format_str ; 50 folderName = folderName.toString(); 51 52 //フォルダー名をドライブから検索し、IDを取得 53 var folderID = DriveApp.getFoldersByName(folderName).next().getId(); 54 // Logger.log(folderID); 55 return DriveApp.getFolderById(folderID).getFilesByName(element).next().getId(); 56 }); 57 Logger.log(fileIDs); 58 59 60 //スプレッドシートアプリから取得したIDのスプレッドシートを起動し、アクティブシート取得 61 var sheet = fileIDs.map(function(element){ 62 var sht= SpreadsheetApp.openById(element); 63 var st = sht.getActiveSheet(); 64 var array = []; 65 var latestPaidHour = st.getRange( 1,1 ).getValues(); 66 latestPaidHour = latestPaidHour.toString(); 67 for ( var i = 0; i < latestPaidHour.length; i++ ){ 68 return array.push(latestPaidHour); 69 } 70 Logger.log(latestPaidHour); 71 }); 72 Logger.log(sheet); 73 74} 75
試したこと
最初は配列一つで、その中で作業が完結されるような書き方をしたかったのですが、何度やっても失敗したので、配列の数値を、
1.ファイル名の指定
2.ファイルIDの指定
3.各ファイルにアクセスして、指定のセルから数値を取得し、配列に格納
という順序で更新していくような形にしてみました。
最後の段階で、指定のセルから数値を取得し、Logger.logには各値を反映できていますが、それを配列に格納できません。
もしくは配列でなくとも、そのまま数値を現在開いている一括管理するスプレッドシートの指定の位置にそのままsetValueできれば問題はないです。
しかし、いろいろと調べては試してみるも、何が合っていて、間違っているのか区別がつかず、途方に暮れています。
また動作が少し遅いのでもっとシンプルな文にならないかなと思いながらも、どう改良できるかわかりません。
わからないことだらけで、申し訳ございませんが、どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/04 02:57
2019/02/04 02:59
2019/02/04 03:01
2019/02/04 03:02
2019/02/04 03:03
2019/02/04 03:09 編集
2019/02/04 03:47
2019/02/04 03:51
2019/02/04 04:36