NPOI操作Excel文件

Posted 航行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NPOI操作Excel文件相关的知识,希望对你有一定的参考价值。

首先,通过NuGet添加NPOI. 

NPOI依赖SharpZipLib,通过NuGet添加SharpZipLib.

然后添加NPOI.

 

添加后项目的引用列表如下:

 

把DataTable转换成Excel文件。

代码如下: 

        public static MemoryStream RenderDataTableToExcel(DataTable table)
        {
            MemoryStream ms = new MemoryStream();

            IWorkbook workbook = new HSSFWorkbook();
            ISheet sheet = workbook.CreateSheet(table.TableName);

            for (int rowIndex = 0; rowIndex < table.Rows.Count; rowIndex++)
            {
                IRow dataRow = sheet.CreateRow(rowIndex);
                foreach (DataColumn column in table.Columns)
                {
                    dataRow.CreateCell(column.Ordinal).SetCellValue(table.Rows[rowIndex][column].ToString());
                }
            }

            workbook.Write(ms);
            ms.Close();

            return ms;
        }
View Code

转换Excel文件内容如下:

 

Excel文件添加表头

代码: 

        public static MemoryStream RenderDataTableToExcelWithHeader(DataTable table)
        {
            MemoryStream ms = new MemoryStream();

            IWorkbook workbook = new HSSFWorkbook();
            ISheet sheet = workbook.CreateSheet(table.TableName);
            IRow headerRow = sheet.CreateRow(0);
            foreach (DataColumn column in table.Columns)
            {
                headerRow.CreateCell(column.Ordinal).SetCellValue(string.Format("    {0}    ", column.Caption));
            }

            for (int rowIndex = 0; rowIndex < table.Rows.Count; rowIndex++)
            {
                IRow dataRow = sheet.CreateRow(rowIndex+1);
                foreach (DataColumn column in table.Columns)
                {
                    dataRow.CreateCell(column.Ordinal).SetCellValue(table.Rows[rowIndex][column].ToString());
                }
            }

            workbook.Write(ms);
            ms.Close();

            return ms;
        }
View Code

转换Excel文件内容如下:

 

添加Excel文件添加表头样式

 代码: 

public static MemoryStream RenderDataTableToExcelWithHeaderRowStyle(DataTable table)
        {
            MemoryStream ms = new MemoryStream();

            IWorkbook workbook = new HSSFWorkbook();
            ISheet sheet = workbook.CreateSheet(table.TableName);
            IRow headerRow = sheet.CreateRow(0);

            ICellStyle headStyle = workbook.CreateCellStyle();
            headStyle.Alignment = HorizontalAlignment.Center;
            headStyle.FillForegroundColor = HSSFColor.Grey25Percent.Index;
            headStyle.FillPattern = FillPattern.SolidForeground;
            IFont font = workbook.CreateFont();
            font.FontName = "Microsoft Yahei";
            font.FontHeightInPoints = 11;
            font.IsBold = true;
            font.Color = HSSFColor.White.Index;
            headStyle.SetFont(font);
            headStyle.BorderBottom = BorderStyle.Thin;
            headStyle.BorderRight = BorderStyle.Thin;
            headStyle.BorderLeft = BorderStyle.Thin;

            foreach (DataColumn column in table.Columns)
            {
                ICell cell = headerRow.CreateCell(column.Ordinal);
                cell.SetCellValue(string.Format("    {0}    ", column.Caption));
                cell.CellStyle = headStyle;
            }

            for (int rowIndex = 0; rowIndex < table.Rows.Count; rowIndex++)
            {
                IRow dataRow = sheet.CreateRow(rowIndex + 1);
                foreach (DataColumn column in table.Columns)
                {
                    dataRow.CreateCell(column.Ordinal).SetCellValue(table.Rows[rowIndex][column].ToString());
                }
            }

            workbook.Write(ms);
            ms.Close();

            return ms;
        }
View Code

转换Excel文件内容如下:

 

添加Excel文件添加数据行样式

  代码: 

public static MemoryStream RenderDataTableToExcelWithDataRowStyle(DataTable table)
        {
            MemoryStream ms = new MemoryStream();

            IWorkbook workbook = new HSSFWorkbook();
            ISheet sheet = workbook.CreateSheet(table.TableName);
            IRow headerRow = sheet.CreateRow(0);

            ICellStyle headStyle = workbook.CreateCellStyle();
            headStyle.Alignment = HorizontalAlignment.Center;
            headStyle.FillForegroundColor = HSSFColor.Grey25Percent.Index;
            headStyle.FillPattern = FillPattern.SolidForeground;
            IFont font = workbook.CreateFont();
            font.FontName = "Microsoft Yahei";
            font.FontHeightInPoints = 11;
            font.IsBold = true;
            font.Color = HSSFColor.White.Index;
            headStyle.SetFont(font);
            headStyle.BorderBottom = BorderStyle.Thin;
            headStyle.BorderRight = BorderStyle.Thin;
            headStyle.BorderLeft = BorderStyle.Thin;

            ICellStyle dataRowEvenStyle = workbook.CreateCellStyle();
            dataRowEvenStyle.Alignment = HorizontalAlignment.Center;
            dataRowEvenStyle.FillForegroundColor = HSSFColor.LightOrange.Index;
            dataRowEvenStyle.FillPattern = FillPattern.SolidForeground;
            IFont dataRowEvenFont = workbook.CreateFont();
            dataRowEvenFont.FontName = "Microsoft Yahei";
            dataRowEvenFont.FontHeightInPoints = 11;
            dataRowEvenFont.Color = HSSFColor.Blue.Index;
            dataRowEvenStyle.SetFont(dataRowEvenFont);
            dataRowEvenStyle.BorderBottom = BorderStyle.Thin;
            dataRowEvenStyle.BorderRight = BorderStyle.Thin;
            dataRowEvenStyle.BorderLeft = BorderStyle.Thin;

            ICellStyle dataRowOddStyle = workbook.CreateCellStyle();
            dataRowOddStyle.Alignment = HorizontalAlignment.Center;
            dataRowOddStyle.FillForegroundColor = HSSFColor.LightGreen.Index;
            dataRowOddStyle.FillPattern = FillPattern.SolidForeground;
            IFont dataRowOddFont = workbook.CreateFont();
            dataRowOddFont.FontName = "Microsoft Yahei";
            dataRowOddFont.FontHeightInPoints = 11;
            dataRowOddFont.Color = HSSFColor.Black.Index;
            dataRowOddStyle.SetFont(dataRowOddFont);
            dataRowOddStyle.BorderBottom = BorderStyle.Thin;
            dataRowOddStyle.BorderRight = BorderStyle.Thin;
            dataRowOddStyle.BorderLeft = BorderStyle.Thin;

            foreach (DataColumn column in table.Columns)
            {
                ICell cell = headerRow.CreateCell(column.Ordinal);
                cell.SetCellValue(string.Format("    {0}    ", column.Caption));
                cell.CellStyle = headStyle;
            }

            for (int rowIndex = 0; rowIndex < table.Rows.Count; rowIndex++)
            {
                IRow dataRow = sheet.CreateRow(rowIndex + 1);
                foreach (DataColumn column in table.Columns)
                {
                    ICell cell = dataRow.CreateCell(column.Ordinal);
                    cell.SetCellValue(table.Rows[rowIndex][column].ToString());
                    if (rowIndex % 2 == 0)
                    {
                        cell.CellStyle = dataRowEvenStyle;
                    }
                    else
                    {
                        cell.CellStyle = dataRowOddStyle;
                    }
                }
            }

            workbook.Write(ms);
            ms.Close();

            return ms;
        }
View Code

转换Excel文件内容如下:

Excel文件合并单元格

代码: 

public static MemoryStream RenderDataTableToExcelMergedRegion(DataTable table)
        {
            MemoryStream ms = new MemoryStream();

            IWorkbook workbook = new HSSFWorkbook();
            ISheet sheet = workbook.CreateSheet(table.TableName);
            IRow headerRow = sheet.CreateRow(0);

            ICellStyle headStyle = workbook.CreateCellStyle();
            headStyle.Alignment = HorizontalAlignment.Center;
            headStyle.FillForegroundColor = HSSFColor.Grey25Percent.Index;
            headStyle.FillPattern = FillPattern.SolidForeground;
            IFont font = workbook.CreateFont();
            font.FontName = "Microsoft Yahei";
            font.FontHeightInPoints = 11;
            font.IsBold = true;
            font.Color = HSSFColor.White.Index;
            headStyle.SetFont(font);
            headStyle.BorderBottom = BorderStyle.Thin;
            headStyle.BorderRight = BorderStyle.Thin;
            headStyle.BorderLeft = BorderStyle.Thin;

            ICellStyle dataRowEvenStyle = workbook.CreateCellStyle();
            dataRowEvenStyle.Alignment = HorizontalAlignment.Center;
            dataRowEvenStyle.FillForegroundColor = HSSFColor.LightOrange.Index;
            dataRowEvenStyle.FillPattern = FillPattern.SolidForeground;
            IFont dataRowEvenFont = workbook.CreateFont();
            dataRowEvenFont.FontName = "Microsoft Yahei";
            dataRowEvenFont.FontHeightInPoints = 11;
            dataRowEvenFont.Color = HSSFColor.Blue.Index;
            dataRowEvenStyle.SetFont(dataRowEvenFont);
            dataRowEvenStyle.BorderBottom = BorderStyle.Thin;
            dataRowEvenStyle.BorderRight = BorderStyle.Thin;
            dataRowEvenStyle.BorderLeft = BorderStyle.Thin;

            ICellStyle dataRowOddStyle = workbook.CreateCellStyle();
            dataRowOddStyle.Alignment = HorizontalAlignment.Center;
            dataRowOddStyle.FillForegroundColor = HSSFColor.LightGreen.Index;
            dataRowOddStyle.FillPattern = FillPattern.SolidForeground;
            IFont dataRowOddFont = workbook.CreateFont();
            dataRowOddFont.FontName = "Microsoft Yahei";
            dataRowOddFont.FontHeightInPoints = 11;
            dataRowOddFont.Color = HSSFColor.Black.Index;
            dataRowOddStyle.SetFont(dataRowOddFont);
            dataRowOddStyle.BorderBottom = BorderStyle.Thin;
            dataRowOddStyle.BorderRight = BorderStyle.Thin;
            dataRowOddStyle.BorderLeft = BorderStyle.Thin;

            foreach (DataColumn column in table.Columns)
            {
                ICell cell = headerRow.CreateCell(column.Ordinal);
                cell.SetCellValue(string.Format("    {0}    ", column.Caption));
                cell.CellStyle = headStyle;
            }

            for (int rowIndex = 0; rowIndex < table.Rows.Count; rowIndex++)
            {
                IRow dataRow = sheet.CreateRow(rowIndex + 1);
                foreach (DataColumn column in table.Columns)
                {
                    ICell cell = dataRow.CreateCell(column.Ordinal);
                    cell.SetCellValue(table.Rows[rowIndex][column].ToString());
                    if (rowIndex % 2 == 0)
                    {
                        cell.CellStyle = dataRowEvenStyle;
                    }
                    else
                    {
                        cell.CellStyle = dataRowOddStyle;
                    }
                }
            }

            sheet.AddMergedRegion(new CellRangeAddress(1, 2, 0, 0));
            sheet.AddMergedRegion(new CellRangeAddress(3, 4, 0, 0));
            sheet.AddMergedRegion(new CellRangeAddress(5, 6, 0, 0));
            sheet.AddMergedRegion(new CellRangeAddress(7, 8, 0, 0));
            sheet.AddMergedRegion(new CellRangeAddress(9, 10, 0, 0));

            workbook.Write(ms);
            ms.Close();

            return ms;
        }
View Code

转换Excel文件内容如下:

 

以上是关于NPOI操作Excel文件的主要内容,如果未能解决你的问题,请参考以下文章

使用NPOI操作Excel

C#中利用NPOI包操作Excel文件

C#中利用NPOI包操作Excel文件

C#中利用NPOI包操作Excel文件

Net操作Excel(终极方法NPOI)

使用NPOI操作Excel