From 6ca2f993973295e4da82634761da0e5c00e0ef8e Mon Sep 17 00:00:00 2001 From: xcd <834800634@qq.com> Date: 星期二, 14 七月 2020 08:54:27 +0800 Subject: [PATCH] Merge branch 'master' of http://gitblit.broconcentric.com:8088/r/M071 --- src/Bro.M071.DBManager/ExcelExportHelper.cs | 175 ++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 144 insertions(+), 31 deletions(-) diff --git a/src/Bro.M071.DBManager/ExcelExportHelper.cs b/src/Bro.M071.DBManager/ExcelExportHelper.cs index 0ea0c16..ce6958e 100644 --- a/src/Bro.M071.DBManager/ExcelExportHelper.cs +++ b/src/Bro.M071.DBManager/ExcelExportHelper.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Data; +using System.IO; using System.Linq; namespace Bro.M071.DBManager @@ -18,6 +19,13 @@ /// </summary> public Dictionary<string, Dictionary<string, string>> WorksheetColumns { get; set; } public Dictionary<string, DataTable> WorksheetDataTable { get; set; } + + public ExcelExportSet() + { + Worksheets = new List<string>(); + WorksheetColumns = new Dictionary<string, Dictionary<string, string>>(); + WorksheetDataTable = new Dictionary<string, DataTable>(); + } } @@ -70,6 +78,7 @@ /// <returns></returns> public static byte[] ExportExcel(ExcelExportSet excelExportDto, bool showSrNo = false) { + //ExcelPackage.LicenseContext = LicenseContext.Commercial; 5.0浠ヤ笂鐗堟湰 闇�瑕佹巿鏉� byte[] result = null; using (ExcelPackage package = new ExcelPackage()) { @@ -77,8 +86,9 @@ { var dataTable = excelExportDto.WorksheetDataTable[worksheet]; ExcelWorksheet workSheet = package.Workbook.Worksheets.Add($"{worksheet}"); - int startRowFrom = string.IsNullOrEmpty(worksheet) ? 1 : 3; //寮�濮嬬殑琛� - //鏄惁鏄剧ず琛岀紪鍙� + //int startRowFrom = string.IsNullOrEmpty(worksheet) ? 1 : 3; //寮�濮嬬殑琛� + int startRowFrom = 1; //寮�濮嬬殑琛� + //鏄惁鏄剧ず琛岀紪鍙� if (showSrNo) { DataColumn dataColumn = dataTable.Columns.Add("#", typeof(int)); @@ -92,19 +102,28 @@ } //Add Content Into the Excel File workSheet.Cells["A" + startRowFrom].LoadFromDataTable(dataTable, true); - // autofit width of cells with small content - int columnIndex = 1; - foreach (DataColumn item in dataTable.Columns) + + for (int columnIndex = 1; columnIndex <= dataTable.Columns.Count; columnIndex++) { + // autofit width of cells with small content ExcelRange columnCells = workSheet.Cells[workSheet.Dimension.Start.Row, columnIndex, workSheet.Dimension.End.Row, columnIndex]; int maxLength = columnCells.Max(cell => cell.Value.ToString().Count()); if (maxLength < 150) { workSheet.Column(columnIndex).AutoFit(); } - columnIndex++; + // 璁剧疆NG鍗曞厓鏍兼牱寮� + for (int rowIndex = 1; rowIndex <= dataTable.Rows.Count; rowIndex++) + { + if (columnCells[rowIndex, columnIndex].Text == "NG") + { + workSheet.Cells[rowIndex, columnIndex].Style.Font.Bold = true;//瀛椾綋涓虹矖浣� + workSheet.Cells[rowIndex, columnIndex].Style.Fill.PatternType = ExcelFillStyle.Solid; + workSheet.Cells[rowIndex, columnIndex].Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.FromHtml("#E33E33"));// 璁剧疆濉厖鏍峰紡 + } + } } - // format header - bold, yellow on black + // format header - bold, yellow on black 璁剧疆琛ㄥご鏍峰紡 using (ExcelRange r = workSheet.Cells[startRowFrom, 1, startRowFrom, dataTable.Columns.Count]) { r.Style.Font.Color.SetColor(System.Drawing.Color.White); @@ -124,34 +143,128 @@ r.Style.Border.Left.Color.SetColor(System.Drawing.Color.Black); r.Style.Border.Right.Color.SetColor(System.Drawing.Color.Black); } - if (!string.IsNullOrEmpty(worksheet)) - { - workSheet.Cells["A1"].Value = worksheet; - workSheet.Cells["A1"].Style.Font.Size = 20; - workSheet.InsertColumn(1, 1); - workSheet.InsertRow(1, 1); - workSheet.Column(1).Width = 5; - } - result = package.GetAsByteArray(); + //灏唖heet鍐欏叆琛ㄤ腑 + //if (!string.IsNullOrEmpty(worksheet)) + //{ + // workSheet.Cells["A1"].Value = worksheet; + // workSheet.Cells["A1"].Style.Font.Size = 20; + // workSheet.InsertColumn(1, 1); + // workSheet.InsertRow(1, 1); + // workSheet.Column(1).Width = 5; + //} } + result = package.GetAsByteArray(); } return result; } - ///// <summary> - ///// 瀵煎嚭Excel - ///// </summary> - ///// <typeparam name="T"></typeparam> - ///// <param name="data"></param> - ///// <param name="heading"></param> - ///// <param name="isShowSlNo"></param> - ///// <param name="columnsToTake"></param> - ///// <returns></returns> - //public static byte[] ExportExcel<T>(List<T> data, string heading = "", bool isShowSlNo = false, params string[] columnsToTake) - //{ - // ExcelExportSet excelExport = new ExcelExportSet(); - // excelExport. - // return ExportExcel(ListToDataTable(data), heading, isShowSlNo, columnsToTake); - //} + /// <summary> + /// 鏂板缓 鎴� 杩藉姞 鍐欏叆Excel + /// </summary> + /// <param name="excelExportDto"></param> + /// <param name="fileName">瑕佸啓鍏ョ殑鏂囦欢鍚�(鍏ㄨ矾寰勫悕)</param> + /// <param name="showSrNo"></param> + /// <returns></returns> + public static byte[] CreateOrAppendExcel(ExcelExportSet excelExportDto, string fileName, bool showSrNo = false) + { + byte[] result = null; + bool isExist = File.Exists(fileName); + ExcelExportSet newExcelSet = new ExcelExportSet(); + + if (isExist) + { + var oldWorksheetDataTable = WorksheetToTable(fileName, excelExportDto.Worksheets); + newExcelSet.Worksheets = excelExportDto.Worksheets; + newExcelSet.WorksheetColumns = excelExportDto.WorksheetColumns; + + foreach (var sheet in excelExportDto.Worksheets) + { + var oldTable = oldWorksheetDataTable[sheet]; + newExcelSet.WorksheetDataTable[sheet] = oldTable; + if (excelExportDto.WorksheetDataTable[sheet].Rows.Count > 0) + { + //鍚堝苟涓や釜 datatable + newExcelSet.WorksheetDataTable[sheet].Merge(excelExportDto.WorksheetDataTable[sheet]); + } + } + } + else + { + newExcelSet = excelExportDto; + } + + result = ExportExcel(newExcelSet, showSrNo); + return result; + } + + /// <summary> + ///灏嗘寚瀹氱殑Excel鐨勬枃浠惰浆鎹㈡垚DataTable 锛圗xcel鐨勬寚瀹歴heet锛� + /// </summary> + /// <param name="fullFielPath">鏂囦欢鐨勭粷瀵硅矾寰�</param> + /// <returns></returns> + public static Dictionary<string, DataTable> WorksheetToTable(string fullFielPath, List<string> worksheets) + { + try + { + var resultWorksheetDataTable = new Dictionary<string, DataTable>(); + FileInfo existingFile = new FileInfo(fullFielPath); + ExcelPackage package = new ExcelPackage(existingFile); + foreach (var sheet in worksheets) + { + ExcelWorksheet worksheet = package.Workbook.Worksheets[sheet];//閫夊畾 鎸囧畾椤� + var dataTable = WorksheetToTable(worksheet); + resultWorksheetDataTable[sheet] = dataTable; + } + return resultWorksheetDataTable; + } + catch (Exception) + { + throw; + } + } + + /// <summary> + /// 灏唚orksheet杞垚datatable + /// </summary> + /// <param name="worksheet">寰呭鐞嗙殑worksheet</param> + /// <returns>杩斿洖澶勭悊鍚庣殑datatable</returns> + public static DataTable WorksheetToTable(ExcelWorksheet worksheet) + { + //鑾峰彇worksheet鐨勮鏁� + int rows = worksheet.Dimension.End.Row; + //鑾峰彇worksheet鐨勫垪鏁� + int cols = worksheet.Dimension.End.Column; + + DataTable dt = new DataTable(worksheet.Name); + DataRow dr = null; + for (int i = 1; i <= rows; i++) + { + if (i > 1) + dr = dt.Rows.Add(); + + for (int j = 1; j <= cols; j++) + { + //榛樿灏嗙涓�琛岃缃负datatable鐨勬爣棰� + if (i == 1) + dt.Columns.Add(GetString(worksheet.Cells[i, j].Value)); + //鍓╀笅鐨勫啓鍏atatable + else + dr[j - 1] = GetString(worksheet.Cells[i, j].Value); + } + } + return dt; + } + private static string GetString(object obj) + { + try + { + return obj.ToString(); + } + catch (Exception) + { + return ""; + } + } + } } -- Gitblit v1.8.0