DataTable to Excel(使用NPOI、EPPlus將數據表中的數據讀取到excel格式內存中)


        /// <summary>
        /// DataTable to Excel(將數據表中的數據讀取到excel格式內存中)
        /// </summary>
        /// <param name="dataTable">數據表</param>
        /// <param name="excelType">excel格式</param>
        /// <param name="sheetName">excel工作表名稱</param>
        /// <returns>內存流數據</returns>
        public static Stream DataTableToExcel(DataTable dataTable, string excelType = ".xlsx", string sheetName = "sheet1")
        {
            Stream stream;
            try
            {
                //根據excel文件類型創建excel數據結構
                switch (excelType)
                {
                    case ".xlsx":
                        stream = DataTableToExcelXlsx(dataTable, sheetName);
                        break;
                    case ".xls":
                        stream = DataTableToExcelXls(dataTable, sheetName);
                        break;
                    default:
                        stream = null;
                        break;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return stream;
        }

2007版本使用EPPlus創建excel內存數據

        /// <summary>
        /// DataTable to Excel2007(將數據表中的數據讀取到excel格式內存中)
        /// </summary>
        /// <param name="dataTable">數據表</param>
        /// <param name="sheetName">excel工作表名稱</param>
        /// <returns>內存流數據</returns>
        public static Stream DataTableToExcelXlsx(DataTable dataTable, string sheetName)
        {
            try
            {
                using (ExcelPackage pck = new ExcelPackage())
                {
                    ExcelWorksheet ws = pck.Workbook.Worksheets.Add(sheetName);
                    ws.Cells["A1"].LoadFromDataTable(dataTable, true);
                    MemoryStream ms = new MemoryStream();
                    pck.SaveAs(ms);
                    ms.Flush();
                    ms.Position = 0;//指定當前流的位置從0開始
                    return ms;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

97-2003版本使用NPOI創建excel內存數據

        /// <summary>
        /// DataTable to Excel97-2003(將數據表中的數據讀取到excel格式內存中)
        /// </summary>
        /// <param name="dataTable">數據表</param>
        /// <param name="sheetName">excel工作表名稱</param>
        /// <returns>內存流數據</returns>
        public static Stream DataTableToExcelXls(DataTable dataTable, string sheetName)
        {
            try
            {
                const int startIndex = 0;
                var fields = dataTable.Columns;
                //創建excel數據結構
                var workbook = new HSSFWorkbook();
                //創建excel工作表
                var sheet = workbook.CreateSheet(sheetName);
                sheet.DefaultRowHeight = 200 * 20;
                #region 創建標題行
                var row = sheet.CreateRow(startIndex);
                var headStyle = GetHeadStyle(workbook);
                foreach (DataColumn column in dataTable.Columns)
                {
                    var cellIndex = fields.IndexOf(column) + startIndex;
                    var cell = row.CreateCell(cellIndex);
                    cell.SetCellValue(column.ColumnName);
                    cell.CellStyle = headStyle;
                    sheet.AutoSizeColumn(cellIndex);
                }
                #endregion
                #region 創建數據行
                int rowIndex = 0;
                foreach (DataRow dataRow in dataTable.Rows)
                {
                    row = sheet.CreateRow(rowIndex + 1);
                    foreach (DataColumn column in dataTable.Columns)
                    {
                        var cellIndex = fields.IndexOf(column) + startIndex;
                        var dataStyle = GetDataStyle(workbook);
                        var cell = row.CreateCell(cellIndex);
                        cell.CellStyle = dataStyle;
                        var value = dataRow[column.ColumnName];
                        switch ((value ?? string.Empty).GetType().Name.ToLower())
                        {
                            case "int32":
                            case "int64":
                            case "decimal":
                                dataStyle.Alignment = HorizontalAlignment.RIGHT;
                                cell.SetCellValue(ZConvert.To<double>(value, 0));
                                break;
                            default:
                                cell.CellStyle.Alignment = HorizontalAlignment.LEFT;
                                cell.SetCellValue(ZConvert.ToString(value));
                                break;
                        }
                    }
                    rowIndex++;
                }
                #endregion
                #region 將數據寫到內存數據流
                MemoryStream ms = new MemoryStream();
                workbook.Write(ms);
                ms.Flush();
                ms.Position = 0;//指定當前流的位置從0開始

                workbook = null;
                sheet = null;
                row = null;
                #endregion
                return ms;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

 

        /// <summary>
        /// 設置excel表頭樣式
        /// </summary>
        /// <param name="workbook"></param>
        /// <returns></returns>
        private static ICellStyle GetHeadStyle(HSSFWorkbook workbook)
        {
            //表頭樣式
            var headStyle = workbook.CreateCellStyle();
            headStyle.Alignment = HorizontalAlignment.LEFT;//居中對齊
            //表頭單元格背景色
            headStyle.FillForegroundColor = HSSFColor.LIGHT_GREEN.index;
            headStyle.FillPattern = FillPatternType.SOLID_FOREGROUND;
            //表頭單元格邊框
            headStyle.BorderTop = BorderStyle.THIN;
            headStyle.TopBorderColor = HSSFColor.BLACK.index;
            headStyle.BorderRight = BorderStyle.THIN;
            headStyle.RightBorderColor = HSSFColor.BLACK.index;
            headStyle.BorderBottom = BorderStyle.THIN;
            headStyle.BottomBorderColor = HSSFColor.BLACK.index;
            headStyle.BorderLeft = BorderStyle.THIN;
            headStyle.LeftBorderColor = HSSFColor.BLACK.index;
            //表頭字體設置
            var font = workbook.CreateFont();
            font.FontHeightInPoints = 12;//字號
            font.Boldweight = 600;//加粗
            //font.Color = HSSFColor.WHITE.index;//顏色
            headStyle.SetFont(font);

            return headStyle;
        }

 

        /// <summary>
        /// 設置excel數據行樣式
        /// </summary>
        /// <param name="workbook"></param>
        /// <returns></returns>
        private static ICellStyle GetDataStyle(HSSFWorkbook workbook)
        {
            //數據樣式
            var dataStyle = workbook.CreateCellStyle();
            dataStyle.Alignment = HorizontalAlignment.LEFT;//左對齊
            //數據單元格的邊框
            dataStyle.BorderTop = BorderStyle.THIN;
            dataStyle.TopBorderColor = HSSFColor.BLACK.index;
            dataStyle.BorderRight = BorderStyle.THIN;
            dataStyle.RightBorderColor = HSSFColor.BLACK.index;
            dataStyle.BorderBottom = BorderStyle.THIN;
            dataStyle.BottomBorderColor = HSSFColor.BLACK.index;
            dataStyle.BorderLeft = BorderStyle.THIN;
            dataStyle.LeftBorderColor = HSSFColor.BLACK.index;
            //數據的字體
            var datafont = workbook.CreateFont();
            datafont.FontHeightInPoints = 11;//字號
            dataStyle.SetFont(datafont);

            return dataStyle;
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM