C# 使用NPOI导出Excel,首行冻结,添加筛选,填充颜色,列宽自适应

Posted xyz0835

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 使用NPOI导出Excel,首行冻结,添加筛选,填充颜色,列宽自适应相关的知识,希望对你有一定的参考价值。

使用NuGet安装NPOI,添加以下命名空间

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;

  

添加类 ExcelExporter

 

    public static class ExcelExporter
    
        /// <summary>
        /// DataTable导出Excel
        /// </summary>
        /// <param name="dataTable">数据源</param>
        /// <param name="fileName">保存的文件名</param>
        /// <param name="sheetName">表名</param>
        public static void ExportToExcel(this DataTable dataTable, string fileName, string sheetName = "Sheet1")
        
            if (dataTable == null || dataTable.Rows.Count == 0)
                throw new Exception("No data to export");

            ISheet sheet = null;
            IWorkbook workbook = null;
            try
            
                using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                
                    if (fileName.IndexOf(".xlsx") > 0) // 2007版本
                        workbook = new XSSFWorkbook();
                    else if (fileName.IndexOf(".xls") > 0) // 2003版本
                        workbook = new HSSFWorkbook();
                    else
                        throw new NotSupportedException("Not supported file extension");

                    if (string.IsNullOrEmpty(sheetName))
                        sheetName = "Sheet1";

                    sheet = workbook.CreateSheet(sheetName);

                    ICellStyle headerStyle = workbook.CreateCellStyle(); //首行填充黄色
                    headerStyle.FillForegroundColor = IndexedColors.Yellow.Index;
                    headerStyle.FillPattern = FillPattern.SolidForeground;

                    IRow row = sheet.CreateRow(0);
                    for (int columnIndex = 0; columnIndex < dataTable.Columns.Count; columnIndex++)
                    
                        var cell = row.CreateCell(columnIndex);
                        cell.CellStyle = headerStyle;
                        cell.SetCellValue(dataTable.Columns[columnIndex].ColumnName); //设置列名
                    

                    for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; rowIndex++)
                    
                        row = sheet.CreateRow(rowIndex + 1);
                        for (int columnIndex = 0; columnIndex < dataTable.Columns.Count; columnIndex++)
                        
                            row.CreateCell(columnIndex).SetCellValue(Convert.ToString(dataTable.Rows[rowIndex][columnIndex]));
                        
                    

                    for (int columnIndex = 0; columnIndex < dataTable.Columns.Count; columnIndex++)
                    
                        sheet.AutoSizeColumn(columnIndex); //自适应宽度
                    

                    sheet.SetAutoFilter(new CellRangeAddress(0, 0, 0, dataTable.Columns.Count - 1)); //首行筛选
                    sheet.CreateFreezePane(dataTable.Columns.Count, 1); //首行冻结

                    workbook.Write(fs); //写入到excel
                
            
            finally
            
                if (workbook != null)
                    workbook.Close();
            
        
    

  

使用时传入文件路径,即可将DataTable导出到指定位置。

 

如要导出集合类数据IEnumerable<T>,使用反射转成DataTable即可。方法大同小异,这里就不写了

以上是关于C# 使用NPOI导出Excel,首行冻结,添加筛选,填充颜色,列宽自适应的主要内容,如果未能解决你的问题,请参考以下文章

使用poi导出的excel怎么设置表头不动

c#使用NPOI进行Excel导入导出,附源码,vs2010

C#使用NPOI导出Excel文件

#yyds干货盘点# C#使用NPOI导出Excel文件

C#使用NPOI导出Excel表格

C# 使用NPOI 实现Excel的简单导入导出