using Estsh.Core.Common.Models; using NPOI.HSSF.UserModel; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Text; namespace Estsh.Core.Util { public class NPOIExcelTools { /// /// 根据模板创建Workbook /// /// 模板地址 /// public static HSSFWorkbook InitHSSFWorkbook(string TemplateFilePath) { HSSFWorkbook workbook = null; if (string.IsNullOrEmpty(TemplateFilePath) == false) { // 模板文件的路径 string TemplateFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, TemplateFilePath); FileStream SourceStream = new FileStream(TemplateFile, FileMode.Open); workbook = new HSSFWorkbook(SourceStream); } else { workbook = new HSSFWorkbook(); } return workbook; } #region 无模板 /// /// 根据datatable创建Workbook /// /// /// /// public static HSSFWorkbook DataTableToWorkbook(DataTable dt, string sheetName) { return DataTableToWorkbook(new GridColumn[0], dt, sheetName); } /// /// 根据datatable创建Workbook /// /// /// /// /// public static HSSFWorkbook DataTableToWorkbook(GridColumn[] columnArr, DataTable dt, string sheetName) { return DataTableToWorkbook(string.Empty, columnArr, dt, sheetName); } #endregion #region 有模板 /// /// DataTable装换为Workbook /// /// /// /// /// public static HSSFWorkbook DataTableToWorkbook(string TemplateFilePath, DataTable dt, string sheetName) { return DataTableToWorkbook(TemplateFilePath, new GridColumn[0], dt, sheetName); } /// /// DataTable装换为Workbook /// /// /// /// /// /// public static HSSFWorkbook DataTableToWorkbook(string TemplateFilePath, GridColumn[] columnArr, DataTable dt, string sheetName) { HSSFWorkbook workBook = InitHSSFWorkbook(TemplateFilePath); return AddSheet(workBook, columnArr, dt, sheetName); } #endregion /// /// 给现有Workbook添加Sheet /// /// 需要添加Sheet的Workbook /// 列 /// 原数据 /// SheetName /// public static HSSFWorkbook AddSheet(HSSFWorkbook workbook, GridColumn[] columnArr, DataTable dt, string sheetName) { HSSFSheet sheet = workbook.CreateSheet(sheetName) as HSSFSheet; FillSheet(sheet, columnArr, dt); return workbook; } /// /// 填充Sheet /// /// /// /// public static void FillSheet(HSSFSheet sheet, GridColumn[] columnArr, DataTable dt) { HSSFRow headRow = (HSSFRow)sheet.CreateRow(0); if (columnArr != null) { for (int i = 0, excelCol = 0; i < columnArr.Length; i++) { if (Convert.ToBoolean(columnArr[i].Export)) { headRow.CreateCell(excelCol).SetCellValue(columnArr[i].Display); excelCol++; } } } else { for (int i = 0; i < dt.Columns.Count; i++) { headRow.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName); } } if (dt != null) { for (int i = 0; i < dt.Rows.Count; i++) { DataRow dr = dt.Rows[i]; int row = i + 1; if (row < 65535) { HSSFRow dataRow = (HSSFRow)sheet.CreateRow(row); for (int idx = 0, excelCol = 0; idx < columnArr.Length; idx++) { if (Convert.ToBoolean(columnArr[idx].Export)) { string key = columnArr[idx].Name; if (dt.Columns.Contains(key)) { object obj = dr[key]; if (obj != null && obj != DBNull.Value) { dataRow.CreateCell(excelCol).SetCellValue(obj.ToString()); } } excelCol++; } } } } } if (columnArr != null) { for (int i = 0, excelCol = 0; i < columnArr.Length; i++) { if (Convert.ToBoolean(columnArr[i].Export)) { sheet.AutoSizeColumn(excelCol); excelCol++; } } } else { for (int i = 0; i < dt.Columns.Count; i++) { sheet.AutoSizeColumn(i); } } } } }