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