using System; using System.Data; using System.Drawing; using Kreta.BusinessLogic.Classes; using OfficeOpenXml; using OfficeOpenXml.Style; namespace Kreta.BusinessLogic.Logic { public static class ExportLogic { /// TODO devKornél(enhancement): Ha nem fog ellátni plusz funkciót, akkor csinálni egy optimálisabbat, ami csak oszlopot nevez át és töröl public static DataTable MapDataTable(DataTable fromTable, (string nameFrom, string nameTo, Type type)[] map) { var toTable = new DataTable(); foreach (var (_, nameTo, type) in map) { toTable.Columns.Add(nameTo, type); } foreach (var item in fromTable.AsEnumerable()) { toTable.Rows.Add(GetDataRow(item)); } TryCreateHeaderIfNotExist(toTable); return toTable; DataRow GetDataRow(DataRow fromRow) { var toRow = toTable.NewRow(); foreach (var (nameFrom, nameTo, type) in map) { toRow[nameTo] = Convert.ChangeType(fromRow[nameFrom], type); } return toRow; } } /// /// Kicserélésre kerül az oszlopsorrend, beállításra kerül az oszlop típusa és átneveződik az oszlop neve a 'map' paraméternek megfelelően. /// Végül, remove-olva lesznek a sorrendezésből kimaradt ('map'-ben nem szereplő) oszlopok. /// /// /// /// public static void MapDataTable(DataTable dataTable, (string fromColumn, string toColumn, Type type)[] map, bool removeUnusedColumns) { for (var i = 0; i < map.Length; i++) { dataTable.Columns[map[i].fromColumn].SetOrdinal(i); dataTable.Columns[map[i].fromColumn].DataType = map[i].type; dataTable.Columns[map[i].fromColumn].ColumnName = map[i].toColumn; // csak a végén nevezhető át! } if (removeUnusedColumns) { for (var i = dataTable.Columns.Count - 1; i >= map.Length; i--) { dataTable.Columns.RemoveAt(i); } } } public static bool TryCreateHeaderIfNotExist(DataTable table) { if (table.Rows.Count < 1) { table.Rows.Add(table.NewRow()); return true; } else { return false; } } /// /// Dátum oszlopok megjelenítésének korrigálása, már az export fájlnál. /// /// /// public static void FormatDateFields((string fromColumn, string toColumn, Type type)[] exportColumns, ExcelWorksheet workSheet) { for (int i = 0; i < exportColumns.Length; i++) { if (typeof(DateTime).Equals(exportColumns[i].type)) { workSheet.Column(i + 1).Style.Numberformat.Format = SDAFormat.ShortDate; } } } public static void SetHeaderStyles(ExcelRange range) { range.Style.Fill.PatternType = ExcelFillStyle.Solid; range.Style.Fill.BackgroundColor.SetColor(Core.Constants.Export.HeaderColor); range.Style.VerticalAlignment = ExcelVerticalAlignment.Center; range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; range.Style.Font.Bold = Core.Constants.Export.HeaderIsBold; } public static void SetRowColorAlternate(ExcelWorksheet worksheet, int rowCount) { //NOTE: minden masodik sort szürkével jelöljük az excelben for (var i = 1; i <= rowCount + 1; i++) { if (i % 2 == 0) { worksheet.Row(i).Style.Fill.PatternType = ExcelFillStyle.Solid; worksheet.Row(i).Style.Fill.BackgroundColor.SetColor(Color.LightGray); } } } } }