/// <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; }
