Google スプレッドシートで、javascript を使用してネストされた 2D 配列を作成しました。
シート「時間」は、従業員がさまざまなカテゴリのさまざまな時間を追加する場所です。submit() 関数へのトリガーを含む画像があります。「承認」シートは、マネージャーが承認できる「時間」シートからいくつかのデータを受け取ります。
スクリプトは次のとおりです。
function cleanArray(actual){
var newArray = new Array();
for(var i = 0; i<actual.length; i++){
if(actual[i] != "") {
newArray.push(actual[i]);
};
};
return newArray;
}
function addArray(array){
var sum = 0;
for(var i=0; i<array.length; i++) {
sum += Number(array[i]);
};
return sum;
}
function createArray(cats, hours) {
var newArray = new Array();
for (i in hours) {
if(hours[i] != "" ) {
if(cats[i] == '') { cats[i] = "Unclaimed" };
newArray[i] = new Array(cats[i], hours[i]);
};
};
return newArray;
}
function submit() {
var sheet = SpreadsheetApp.getActive().getSheetByName('Hours');
var employee = sheet.getRange('B1').getValue();
var startDate = sheet.getRange('C2').getValue();
var mondayHours = sheet.getRange('B4:B9').getValues();
var mondayCats = sheet.getRange('D4:D9').getValues();
var mondayArray = createArray(mondayCats, mondayHours);
var mondayTtl = addArray(mondayHours);
var tuesdayHours = sheet.getRange('B11:B16').getValues();
var tuesdayCats = sheet.getRange('D11:D16').getValues();
var tuesdayArray = createArray(tuesdayCats, tuesdayHours);
var tuesdayTtl = addArray(tuesdayHours);
var wednesdayHours = sheet.getRange('B18:B23').getValues();
var wednesdayCats = sheet.getRange('D18:D23').getValues();
var wednesdayArray = createArray(wednesdayCats, wednesdayHours);
var wednesdayTtl = addArray(wednesdayHours);
var thursdayHours = sheet.getRange('B25:B30').getValues();
var thursdayCats = sheet.getRange('D25:D30').getValues();
var thursdayArray = createArray(thursdayCats, thursdayHours);
var thursdayTtl = addArray(thursdayHours);
var fridayHours = sheet.getRange('B32:B37').getValues();
var fridayCats = sheet.getRange('D32:D37').getValues();
var fridayArray = createArray(fridayCats, fridayHours);
var fridayTtl = addArray(fridayHours);
var saturdayHours = sheet.getRange('B39:B44').getValues();
var saturdayCats = sheet.getRange('D39:D44').getValues();
var saturdayArray = createArray(saturdayCats, saturdayHours);
var saturdayTtl = addArray(saturdayHours);
var sundayHours = sheet.getRange('B46:B51').getValues();
var sundayCats = sheet.getRange('D46:D61').getValues();
var sundayArray = createArray(sundayCats, sundayHours);
var sundayTtl = addArray(sundayHours);
var weekArray = new Array();
for (i in mondayArray){
weekArray.push(mondayArray[i]);
};
for (i in tuesdayArray){
weekArray.push(tuesdayArray[i]);
};
for (i in wednesdayArray){
weekArray.push(wednesdayArray[i]);
};
for (i in thursdayArray){
weekArray.push(thursdayArray[i]);
};
for (i in fridayArray){
weekArray.push(fridayArray[i]);
};
for (i in saturdayArray){
weekArray.push(saturdayArray[i]);
};
for (i in sundayArray){
weekArray.push(sundayArray[i]);
};
var weekHours = new Array(mondayTtl, tuesdayTtl, wednesdayTtl, thursdayTtl, fridayTtl, saturdayTtl, sundayTtl);
var weekHoursTtl = addArray(weekHours); //CAPTURE
var sortWeekArray = ArrayLib.sort(weekArray, 0, true)
var approve = SpreadsheetApp.getActive().getSheetByName('Approve');
approve.getRange('D1').setValue(sortWeekArray);
}
現在、2D 配列を「承認」シートの D1 にダンプしています。
出力例:
ESL | 2
-------------------------
Parent Engagement | 8
-------------------------
School Liaison | 2.75
-------------------------
School Liaison | 6.25
-------------------------
School Liaison | 7.25
-------------------------
Tutoring | 3.25
-------------------------
Tutoring | 4
-------------------------
Tutoring | 4.5
-------------------------
Unclaimed | 2.5
-------------------------
Volunteer Svcs | 2
col1 のようなアイテムを組み合わせて、col2 のような値を合計したいと思います。結果を出力する前に、javascript 内で実行したいと思います。
したがって、出力例は次のようになります。
ESL | 2
-------------------------
Parent Engagement | 8
-------------------------
School Liaison | 16.25
-------------------------
Tutoring | 11.75
-------------------------
Unclaimed | 2.5
-------------------------
Volunteer Svcs | 2
何か案は?私はすでに2D Arrays Libraryを使用していますが、これらの関数のどれも法案に適合していないようです。
weekArray は次のようになります。{ "category", val ; "category", val ; ... }
また、コードのDRYに関するアイデアも歓迎します。