简介:本文详细介绍了NPOI库的使用方法,包括基础操作、高级功能及实际案例,旨在帮助开发者高效处理Excel文件。
NPOI是一个开源的.NET库,用于处理Microsoft Office格式文件(如Excel、Word),无需安装Office即可实现读写操作。本文将系统讲解NPOI的核心功能,包括创建Excel文件、读写单元格、设置样式、处理公式及图表等,并通过实际案例展示其应用场景,帮助开发者快速掌握这一工具。
NPOI(Poor Obfuscated Implementation of Office)是Apache POI的.NET移植版本,支持对Excel 2003(.xls)和Excel 2007+(.xlsx)文件的读写操作。其核心优势包括:
通过NuGet包管理器安装NPOI:
Install-Package NPOI
或使用.NET CLI:
dotnet add package NPOI
以下代码演示如何创建一个包含工作表的Excel文件:
using NPOI.SS.UserModel;using NPOI.XSSF.UserModel; // 用于.xlsx格式using System.IO;// 创建工作簿IWorkbook workbook = new XSSFWorkbook();// 创建工作表ISheet sheet = workbook.CreateSheet("Sheet1");// 创建行(第0行)IRow row = sheet.CreateRow(0);// 创建单元格(第0列)ICell cell = row.CreateCell(0);cell.SetCellValue("Hello, NPOI!");// 保存文件using (FileStream fs = new FileStream("output.xlsx", FileMode.Create)){workbook.Write(fs);}
读取现有Excel文件的步骤如下:
using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using System.IO;// 加载文件IWorkbook workbook;using (FileStream fs = new FileStream("input.xlsx", FileMode.Open)){workbook = new XSSFWorkbook(fs);}// 获取工作表ISheet sheet = workbook.GetSheetAt(0); // 第一个工作表// 遍历行和单元格for (int i = 0; i <= sheet.LastRowNum; i++){IRow row = sheet.GetRow(i);if (row != null){for (int j = 0; j < row.LastCellNum; j++){ICell cell = row.GetCell(j);if (cell != null){Console.Write(cell.ToString() + "\t");}}Console.WriteLine();}}
NPOI支持丰富的样式设置,包括字体、颜色、边框等:
// 创建样式ICellStyle style = workbook.CreateCellStyle();// 设置背景色style.FillForegroundColor = IndexedColors.LightBlue.Index;style.FillPattern = FillPattern.SolidForeground;// 设置字体IFont font = workbook.CreateFont();font.Boldweight = (short)FontBoldWeight.Bold;font.Color = IndexedColors.Red.Index;style.SetFont(font);// 应用样式cell.CellStyle = style;
NPOI支持Excel公式计算,例如求和:
IRow formulaRow = sheet.CreateRow(1);ICell formulaCell = formulaRow.CreateCell(0);formulaCell.SetCellFormula("SUM(A1:A10)"); // 假设A1到A10有数值
NPOI支持创建柱状图、折线图等:
// 创建绘图区域IDrawing drawing = sheet.CreateDrawingPatriarch();// 创建图表(需XSSFWorkbook)XSSFChart chart = ((XSSFSheet)sheet).CreateDrawingPatriarch().CreateChart(new ClientAnchor());// 设置图表数据(需结合XSSF系列API)// 实际实现较复杂,建议参考官方示例
假设需将数据库查询结果导出到Excel:
public void ExportToExcel(List<Employee> employees, string filePath){IWorkbook workbook = new XSSFWorkbook();ISheet sheet = workbook.CreateSheet("Employees");// 创建表头IRow headerRow = sheet.CreateRow(0);string[] headers = { "ID", "Name", "Department", "Salary" };for (int i = 0; i < headers.Length; i++){headerRow.CreateCell(i).SetCellValue(headers[i]);}// 填充数据for (int i = 0; i < employees.Count; i++){IRow row = sheet.CreateRow(i + 1);row.CreateCell(0).SetCellValue(employees[i].Id);row.CreateCell(1).SetCellValue(employees[i].Name);row.CreateCell(2).SetCellValue(employees[i].Department);row.CreateCell(3).SetCellValue(employees[i].Salary);}// 保存文件using (FileStream fs = new FileStream(filePath, FileMode.Create)){workbook.Write(fs);}}
以下代码展示如何生成一个带样式的财务报表:
public void GenerateFinancialReport(List<Transaction> transactions, string filePath){IWorkbook workbook = new XSSFWorkbook();ISheet sheet = workbook.CreateSheet("Financial Report");// 设置列宽sheet.SetColumnWidth(0, 15 * 256); // 第一列宽度// 创建标题样式ICellStyle titleStyle = workbook.CreateCellStyle();IFont titleFont = workbook.CreateFont();titleFont.FontHeightInPoints = 16;titleFont.Boldweight = (short)FontBoldWeight.Bold;titleStyle.SetFont(titleFont);// 创建标题行IRow titleRow = sheet.CreateRow(0);ICell titleCell = titleRow.CreateCell(0);titleCell.SetCellValue("Financial Report 2023");titleCell.CellStyle = titleStyle;sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 3)); // 合并单元格// 填充数据(省略具体实现)// ...// 保存文件using (FileStream fs = new FileStream(filePath, FileMode.Create)){workbook.Write(fs);}}
SXSSFWorkbook(流式API)减少内存占用。HSSFWorkbook(.xls)或XSSFWorkbook(.xlsx)。FormulaEvaluator手动触发。try-catch捕获FileNotFoundException。NPOI是一个功能强大且灵活的.NET库,适用于各种Excel操作场景。通过本文的介绍,开发者可以快速掌握其基础用法,并通过实际案例深化理解。如需进一步学习,可参考以下资源:
通过不断实践和探索,开发者可以充分发挥NPOI的潜力,高效解决工作中的Excel处理需求。