From 893ca745eb5ea5a0d7199a1725bfae3869aef707 Mon Sep 17 00:00:00 2001 From: keke Date: Tue, 29 Aug 2023 17:36:31 +0800 Subject: [PATCH] =?UTF-8?q?[FE=20API]=20=E6=9C=AA=E5=AE=8C=E6=88=90=20?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=A0=B1=E8=A1=A8=E6=9F=A5=E8=A9=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20=E5=A1=AB=E8=B3=87=E6=96=99=E9=82=8F=E8=BC=AF?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiControllers/HydroMeterController.cs | 136 ++++++------------ .../ElectricEachTotalCompare_temp.xlsx | Bin 0 -> 13749 bytes 2 files changed, 44 insertions(+), 92 deletions(-) create mode 100644 FrontendWebApi/template/ElectricEachTotalCompare_temp.xlsx diff --git a/FrontendWebApi/ApiControllers/HydroMeterController.cs b/FrontendWebApi/ApiControllers/HydroMeterController.cs index c195bfa..4d1e764 100644 --- a/FrontendWebApi/ApiControllers/HydroMeterController.cs +++ b/FrontendWebApi/ApiControllers/HydroMeterController.cs @@ -833,8 +833,6 @@ namespace FrontendWebApi.ApiControllers result.Add(ElectricListEachTotal(input).Result.Value.Data.ToList()); - // --- 8/24 修改到這裡囉 --- - List> docFile = new List>(); var workbook = new XSSFWorkbook(); @@ -879,106 +877,60 @@ namespace FrontendWebApi.ApiControllers stylein12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; stylein12.WrapText = true; #endregion - foreach (var r in result) + + using (FileStream templateStream = new FileStream(".\\template\\ElectricEachTotalCompare_temp.xlsx", FileMode.Open, FileAccess.Read)) { - if (r.Count > 0) + var templateWorkbook = new XSSFWorkbook(templateStream); + var sheet = templateWorkbook.GetSheetAt(0); // 這裡假設您要使用第一個工作表 + + // 設定要填入資料的位置(rowIndex 和 columnIndex) + int rowIndex = 4; // 假設要從第二列開始填入 + int columnIndex = 1; // 假設第一欄是要填入的位置 + + foreach (var r in result) { + columnIndex = 1; + IRow row = sheet.GetRow(rowIndex) ?? sheet.CreateRow(rowIndex); + string buildingName = r.Select(x => x.building_name).FirstOrDefault(); - var sheet = workbook.CreateSheet($"{buildingName} 電表報表"); - int RowPosition = 0; - #region set cell - IRow row = sheet.CreateRow(RowPosition); - sheet.SetColumnWidth(0, 4 * 160 * 12); - sheet.SetColumnWidth(1, 4 * 160 * 12); - sheet.SetColumnWidth(2, 4 * 160 * 12); + string floorTag = r.Select(x => x.floor_tag).FirstOrDefault(); + ICell cell = row.GetCell(columnIndex) ?? row.CreateCell(columnIndex); + cell.SetCellValue(buildingName + floorTag); - int i = 0; - ICell cell = row.CreateCell(i++); - cell.SetCellValue("棟別"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(i++); - cell.SetCellValue("樓層"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(i++); - cell.SetCellValue("設備"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(i++); - cell.SetCellValue("單位"); - cell.CellStyle = styleLine12; + cell = row.GetCell(columnIndex++) ?? row.CreateCell(columnIndex++); + string deviceFullName = r.Select(x => x.device_full_name).FirstOrDefault(); + cell.SetCellValue(deviceFullName); - foreach (var rr in r.FirstOrDefault().rawData) + foreach (var rawD in r.FirstOrDefault().rawData) { - cell = row.CreateCell(i++); - cell.SetCellValue(rr.timeStamp); - cell.CellStyle = styleLine12; + cell = row.GetCell(columnIndex++) ?? row.CreateCell(columnIndex++); + cell.SetCellValue(rawD.avg_rawdata); } - cell = row.CreateCell(i++); - cell.SetCellValue("小計"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(i++); - cell.SetCellValue("單價"); - cell.CellStyle = styleLine12; - cell = row.CreateCell(i++); - cell.SetCellValue("金額總計"); - cell.CellStyle = styleLine12; - #endregion - - foreach (var rr in r) - { - RowPosition += 1; - int k = 4; - row = sheet.CreateRow(RowPosition); - for (int j = 0; j <= i; j++) - { - cell = row.CreateCell(j); - if (j == 0) - { - cell.SetCellValue(rr.building_name); - } - else if (j == 1) - { - cell.SetCellValue(rr.floor_tag); - } - else if (j == 2) - { - cell.SetCellValue(rr.device_full_name); - } - else if (j == 3) - { - cell.SetCellValue("kWh"); - } - - else if (j == 4) - { - foreach (var rrr in rr.rawData) - { - cell.SetCellValue(rrr.avg_rawdata.ToString()); - j++; - k++; - cell = row.CreateCell(j); - } - } - - if (j == k) - { - cell.SetCellValue(rr.total); - } - else if (j == k + 1) - { - cell.SetCellValue(rr.price); - } - else if (j == k + 2) - { - cell.SetCellValue(rr.total_price); - } - - cell.CellStyle = style12; - } - } + rowIndex++; } + + // // 設定欲填入的值 + // string buildingName = "Building A"; + // string floorTag = "1F"; + // string deviceFullName = "Device X"; + // string unit = "kWh"; + + // // 填入資料 + // IRow row = sheet.GetRow(rowIndex) ?? sheet.CreateRow(rowIndex); + // ICell cell = row.GetCell(columnIndex) ?? row.CreateCell(columnIndex); + // cell.SetCellValue(buildingName); + + // // 同樣方式填入其他資料 + // cell = row.GetCell(columnIndex + 1) ?? row.CreateCell(columnIndex + 1); + // cell.SetCellValue(floorTag); + + // ... + } + // --- 8/24 修改到這裡囉 --- + var ms = new NpoiMemoryStream { AllowClose = false @@ -1062,7 +1014,7 @@ left join (select device_number, sum(kwh_result) kwh_sum from archive_electric_m left join (select device_number, sum(kwh_result) kwh_sum from archive_electric_meter_month where year(start_timestamp) = {last_year} and month(start_timestamp) = {start_month} group by device_number) d on a.device_number COLLATE utf8mb4_0900_ai_ci = d.device_number -- last Month join building e on a.device_building_tag = e.building_tag where {sqlWhere} -order by a.priority"; +order by e.priority, a.priority"; Logger.LogInformation("SQL = " + sql + " building=" + input.building_tag + " floor_tag = " + input.floor_tag); var rawData = await backendRepository.GetAllAsync(sql); diff --git a/FrontendWebApi/template/ElectricEachTotalCompare_temp.xlsx b/FrontendWebApi/template/ElectricEachTotalCompare_temp.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..29bb6a6561325127912911f75a3ee1010b4a9715 GIT binary patch literal 13749 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 C?pln6MmPqINv`cZP3FZ0gTQVxubI&zsHXrLGd? zkkE8a9#veSFRpTl;Jaqw@xAV(7(`8u$_8g)rl+_28l_HMOi^GctMd)LOksL^52lsS zn>#+-x$gPyBH3A7xuUBQ*?TCmHT9x>sz$mTJkhmrg%0uYd4XtXZIkld7lMDY0EDiz zKoNgaE44{lozQg|)3bTy7z;_X7D%wR)fBy#_DI_A?Lhio6qkvoVOg_806{Wf(>ln3 zJK15mwPo1vzq+P9zXpXP&`I3}HUNP6ch_WT5;^Oq)&f>R+DoS-3~|>k5g& z6GC=tv@OfwRx@0zWq6j zm-xDeOx4T=q)STEfN;vZ-ZIh*GN1Og9@@-%_JF!O&7Mr2e)?HA8q^eRgk14XoD5R$ zmV93$GCQ2z))#{%YQM^rx+*2+1<*-BH39wXdP%m?Zbf9k-fcl?wtTTJ>NK>U%lyps z(ZgV2zfg-ROP=Y?Yr>~x*kT0yb5)vFK|h{W7bB%8mnrKl4d>gI{n#a z-1f)niL8MHH5eRw!o`Y~9k$T@H~FZT^UUU0|MK?_b(Pn(t7fx9`&D!h(>i=N*eEvE zN9FZ!j=@D@Mi(`&%tQ}koe`gggO(?=X8TYhZyPq=>m+NgC{r;vLpv;DPQ z|JK?^vGv6ca`-3xj-vmB| z*#3A~(vxI#&p|t)!li5D-fKGEUH0|g)aeEN-SO`pyUbeX3FY^UaWXVS`}q9vJzYJ@ z1kfmnEDJKZLBe%H6uGA9?73;X7MZK`S_HJi~r27!G()Ln@7 z3n(r5Pcqwn8@ZAQ=!{bb#P~!5F=I^aO%$E%9h_NA?48VhC6KwdK{eiYaX zI{m$seiGmD*?NOXs~#`=u>~A1oE%kPG`j)&LcD?OWPO{`7M30%Is3!jSXNxw5B-K| z98H?KQl;bqTJU~O94nptlxuqZoFUIrUfcQre4?&gGiOgFHu2PkbJKdTBd8|Y*hGr4 zIm^9vGF*WM2pK(eLi#WQTdM2L_l=8+H=>OnFFD(L(BJ%+Q(1*D;Xs>48(s?H{M$U^=GU_+@85Ss zf2PZ3^zj^7AhV+d)uR5Z*%>)F{GZi<%9GvDdD=FPMev5X&(6zo{pSF1ZQ(-*DeHKQaW^Q$?nl~(xUFW8jJl~B;%b1E*t`dAWF zlUdDAmx_xEQBDgv*vQ3s2ZRX%srg~C3E9*;xw*yl8sh?9p0`)3J{!DvKUY#7ZQIc9 zm0d1(%#RxRM{f788SWTvrm{AwnmlRRkxspSgb6`&?`sBE89$(&SjBM2n`{cDOx;-G zS?GA*O{AGxit^1Ty3zKO#s8e`$9C?rI%@Ssue?So^kF&#va5YyC! zfpGFKWc)t`|D+`UCE5eJ*8GE@{HO50lOz8U1pr*(e+&N)RLMW}{7IGjOH&o%KmWvk z5a<5X^5x7 z6#X;b{!7$}?r)-hX5W8m`1hdvmplLv!vp~QM~MDY{NJ7HzluYHSd9M^|GTSIl!F4< T$gl4`5C8+9EMSTK*RTHvy$PT# literal 0 HcmV?d00001