| 37 | } |
| 38 | |
| 39 | function formatReport() { |
| 40 | var ss = SpreadsheetApp.getActiveSpreadsheet(); |
| 41 | var rawSheet = ss.getSheetByName('RawData'); |
| 42 | var reportSheet = ss.getSheetByName('Report') || ss.insertSheet('Report'); |
| 43 | reportSheet.clear(); |
| 44 | |
| 45 | var rawData = rawSheet.getDataRange().getValues(); |
| 46 | |
| 47 | // Adding KPI boxes |
| 48 | var data = rawData.slice(1); |
| 49 | var totalRequests = data.length; |
| 50 | var closedRequests = data.filter(row => row[2] === 'Closed').length; |
| 51 | var openRequests = totalRequests - closedRequests; |
| 52 | |
| 53 | // Adding KPIs with professional styling |
| 54 | var kpiHeaders = [['Report Metrics']]; |
| 55 | var kpis = [ |
| 56 | ['Total Requests', totalRequests], |
| 57 | ['Closed Requests', closedRequests], |
| 58 | ['Open Requests', openRequests] |
| 59 | ]; |
| 60 | |
| 61 | // Append KPI headers |
| 62 | reportSheet.getRange(1, 1, 1, 1).setValues(kpiHeaders); |
| 63 | var headerRange = reportSheet.getRange(1, 1, 1, 1); |
| 64 | headerRange.setBackground('#26428b').setFontColor('#FFFFFF').setFontWeight('bold').setFontSize(14); |
| 65 | headerRange.mergeAcross(); |
| 66 | |
| 67 | // Append KPI values |
| 68 | reportSheet.getRange(2, 1, kpis.length, 2).setValues(kpis); |
| 69 | var kpiRange = reportSheet.getRange(2, 1, kpis.length, 2); |
| 70 | kpiRange.setBackground('#f1f1f1').setFontColor('#000000').setFontWeight('bold').setFontSize(12); |
| 71 | |
| 72 | // Adding some space before the table |
| 73 | reportSheet.appendRow([' ']); |
| 74 | // Add data refreshed timestamp |
| 75 | reportSheet.appendRow(['']); |
| 76 | var timestamp = new Date(); |
| 77 | reportSheet.appendRow(['Data refreshed on:', timestamp]); |
| 78 | var timestampRange = reportSheet.getRange(reportSheet.getLastRow(), 1, 1, 2); |
| 79 | timestampRange.setBackground('#f1f1f1').setFontColor('#000000').setFontWeight('bold'); |
| 80 | reportSheet.appendRow(['Open Requests']); |
| 81 | |
| 82 | // Filter specific columns to include in the detailed table |
| 83 | // Specify the columns you want to include by their indices |
| 84 | // Filter rows based on a specific column value (e.g., only open requests) |
| 85 | var filteredRows = data.filter(row => row[2] === 'Open'); |
| 86 | |
| 87 | // Specify the columns you want to include by their indices |
| 88 | var columnsToInclude = [1, 2, 4, 5, 6]; |
| 89 | |
| 90 | var filteredHeaders = columnsToInclude.map(index => rawData[0][index]); |
| 91 | var filteredData = filteredRows.map(row => columnsToInclude.map(index => row[index])); |
| 92 | |
| 93 | // Append filtered data headers and rows |
| 94 | reportSheet.appendRow(filteredHeaders); |
| 95 | reportSheet.getRange(reportSheet.getLastRow() + 1, 1, filteredData.length, filteredData[0].length).setValues(filteredData); |
| 96 | |