深入解析C#中的第三方库NPOI:Excel和Word文件处理的利器

这篇具有很好参考价值的文章主要介绍了深入解析C#中的第三方库NPOI:Excel和Word文件处理的利器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、引言
在.NET开发中,操作Office文档(特别是Excel和Word)是一项常见的需求。然而,在服务器端或无Microsoft Office环境的场景下,直接使用Office Interop可能会面临挑战。为了解决这个问题,开源库NPOI应运而生,它提供了无需安装Office即可创建、读取和修改Excel (.xls, .xlsx) 和 Word (.doc) 文件的能力。
二、NPOI简介
NPOI是一个基于.NET的API,用于读写微软的OLE 2 Compound Document formats,如Microsoft Office Excel和Word。它是Apache POI项目的.NET移植版本,允许开发者在没有安装Office的情况下处理这些格式的文件。
三、主要组件与方法
1. 安装与引用
Install-Package NPOI
或者在Visual Studio中右键项目 -> 管理NuGet程序包 -> 搜索并安装NPOI。
2. 引用命名空间

using NPOI.SS.UserModel; // Excel相关的接口和类
using NPOI.XSSF.UserModel; // 处理.xlsx文件
using NPOI.HSSF.UserModel; // 处理.xls文件
using System.IO; // 文件操作

3. 创建/打开工作簿

  • 创建一个新的Excel工作簿(.xlsx):
    var workbook = new XSSFWorkbook();
  • 打开一个现有的Excel文件(.xlsx或.xls):
FileStream file = new FileStream("path_to_your_file.xlsx", FileMode.Open, FileAccess.Read);
var workbook = new XSSFWorkbook(file); // .xlsx格式
var workbook = new HSSFWorkbook(file); // .xls格式

4. 创建/获取工作表

  • 创建新的工作表:
    ISheet sheet = workbook.CreateSheet("Sheet1");
  • 获取已存在的工作表:
    ISheet sheet = workbook.GetSheetAt(0); // 获取索引为0的工作表
    5. 写入单元格数据
  • 创建行与单元格:
IRow row = sheet.CreateRow(rowIndex);
ICell cell = row.CreateCell(columnIndex);
  • 设置单元格值:
cell.SetCellValue("文本内容"); // 文本
cell.SetCellValue(12345); // 数字

6. 合并单元格

var region = new CellRangeAddress(startRow, endRow, startColumn, endColumn);
sheet.AddMergedRegion(region);

7. 设置单元格样式

  • 创建样式对象:
    var style = workbook.CreateCellStyle();
  • 设置样式属性(如字体、颜色、对齐方式等):
style.Alignment = HorizontalAlignment.Center;
IFont font = workbook.CreateFont();
font.Boldweight = (short)FontBoldWeight.Bold;
style.SetFont(font);
  • 应用到单元格:
    cell.CellStyle = style;
    8. 保存文件
FileStream outputStream = new FileStream("output.xlsx", FileMode.Create);
workbook.Write(outputStream);
outputStream.Close();

9. 关闭资源

  • 确保关闭Workbook以及相关的文件流以释放资源:
workbook.Close();
file.Close();

四、高级功能

  • 读取现有文件:通过FileStream打开并读取Excel文件内容。

  • 读取公式结果:通过ICell.CachedFormulaResultType或ICell.CellFormula属性获取公式计算结果。

  • 操作图表和图片:NPOI支持插入、更新和删除Excel中的图表和图片。

  • 处理Word文档:通过XWPFDocument类来创建、读取和修改Word(.doc)文件。

五、总结

NPOI库凭借其强大的功能和轻量级设计,已成为.NET环境下处理Office文档的标准工具之一。无论是在Web应用程序后台处理用户上传的Excel文件,还是在批处理任务中生成报表,NPOI都能提供高效且易于使用的解决方案。通过深入理解和熟练运用NPOI的各种方法,开发者可以轻松应对各种复杂的文档处理任务。

六、完整的读取数据例子

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
  public void ReadExcelFile(string filePath)
    {
        // 创建一个FileStream对象来打开Excel文件
        using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            // 根据文件扩展名选择合适的Workbook实现
            IWorkbook workbook;
            if (Path.GetExtension(filePath).ToLower() == ".xlsx")
            {
                workbook = new XSSFWorkbook(file);
            }
            else
            {
                workbook = new HSSFWorkbook(file); // 适用于.xls文件
            }

            // 获取第一个工作表(索引从0开始)
            ISheet sheet = workbook.GetSheetAt(0);

            // 遍历所有行
            for (int rowIndex = 0; rowIndex <= sheet.LastRowNum; rowIndex++)
            {
                IRow row = sheet.GetRow(rowIndex);

                // 如果当前行不为空,则遍历所有单元格
                if (row != null)
                {
                    for (int cellIndex = 0; cellIndex < row.LastCellNum; cellIndex++)
                    {
                        ICell cell = row.GetCell(cellIndex);

                        // 检查单元格是否存在并获取其数据类型和值
                        if (cell != null)
                        {
                            switch (cell.CellType)
                            {
                                case CellType.Numeric:
                                    double numericValue = cell.NumericCellValue;
                                    Console.WriteLine($"第{rowIndex + 1}行,第{cellIndex + 1}列:{numericValue}");
                                    break;
                                case CellType.String:
                                    string stringValue = cell.StringCellValue;
                                    Console.WriteLine($"第{rowIndex + 1}行,第{cellIndex + 1}列:{stringValue}");
                                    break;
                                case CellType.Formula:
                                    // 如果需要显示公式计算结果,使用CachedFormulaResultType
                                    if (cell.CachedFormulaResultType == CellType.Numeric)
                                    {
                                        double formulaValue = cell.NumericCellValue;
                                        Console.WriteLine($"第{rowIndex + 1}行,第{cellIndex + 1}列(公式结果):{formulaValue}");
                                    }
                                    else if (cell.CachedFormulaResultType == CellType.String)
                                    {
                                        string formulaValue = cell.StringCellValue;
                                        Console.WriteLine($"第{rowIndex + 1}行,第{cellIndex + 1}列(公式结果):{formulaValue}");
                                    }
                                    // 其他类型的公式处理...
                                    break;
                                default:
                                    // 对于日期、布尔值等其他类型,做相应处理
                                    break;
                            }
                        }
                        else
                        {
                            Console.WriteLine($"第{rowIndex + 1}行,第{cellIndex + 1}列:空单元格");
                        }
                    }
                }
            }

            // 关闭workbook以释放资源
            workbook.Close();
        }
    }

在这个例子中,我们首先打开了指定路径下的Excel文件,并根据文件类型创建了相应的HSSFWorkbook或XSSFWorkbook对象。然后,我们循环遍历每一行和每一列,获取每个单元格的内容,并根据单元格类型输出对应的值。

请确保已安装NPOI NuGet包并在项目中引用了必要的命名空间。

七、保存数据例子

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
 public void SaveDataToExcel(string filePath)
    {
        // 创建一个新的HSSFWorkbook(适用于.xls格式)或XSSFWorkbook(适用于.xlsx格式)
        IWorkbook workbook = new XSSFWorkbook(); // 使用.xlsx格式

        // 创建新的工作表并设置名称
        ISheet sheet = workbook.CreateSheet("Sheet1");

        // 创建第一行数据
        IRow headerRow = sheet.CreateRow(0);
        headerRow.CreateCell(0).SetCellValue("Name");
        headerRow.CreateCell(1).SetCellValue("Age");
        headerRow.CreateCell(2).SetCellValue("City");

        // 添加三行数据
        for (int i = 1; i <= 3; i++)
        {
            IRow dataRow = sheet.CreateRow(i);

            dataRow.CreateCell(0).SetCellValue($"Person {i}");
            dataRow.CreateCell(1).SetCellValue(i * 10); // 年龄假设为i*10
            dataRow.CreateCell(2).SetCellValue($"City{i}");

            // 设置单元格样式(可选,例如设置字体加粗和居中)
            ICellStyle style = workbook.CreateCellStyle();
            style.Alignment = HorizontalAlignment.Center;
            IFont font = workbook.CreateFont();
            font.Boldweight = (short)FontBoldWeight.Bold;
            style.SetFont(font);
            dataRow.Cells[0].CellStyle = style;
        }

        // 保存到文件
        using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
        {
            workbook.Write(fileStream);
        }

        // 关闭workbook以释放资源
        workbook.Close();
    }

在这个例子中,我们首先创建了一个新的XSSFWorkbook对象,并在其中创建了一个名为"Sheet1"的工作表。接着,我们在表头添加了列名,并插入了三行示例数据。为了演示单元格样式的设置,我们将第一列的数据设置为了加粗和居中的样式。最后,将整个工作簿内容写入指定路径的Excel文件。

请注意,根据实际需求选择创建HSSFWorkbook或XSSFWorkbook,以及调整保存的数据和样式。确保已安装NPOI NuGet包并在项目中引用了必要的命名空间。文章来源地址https://www.toymoban.com/news/detail-841142.html

到了这里,关于深入解析C#中的第三方库NPOI:Excel和Word文件处理的利器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安卓玩机搞机----移植第三方rom修复 第三方GSI系统修复bug综合解析【一】

    很多朋友热衷与刷写第三方非当前机型官方系统的rom。和刷写第三方gsi等等。例如 米系列机型刷写Flyme 一加机型刷写miui oppo刷写gsi等等。 很多友友也会尝试自己移植第三方rom。但此类操作最大的问题在于修复可以开机后的bug,今天的教程综合说明下这类修复思路。资源步骤

    2024年02月07日
    浏览(67)
  • 【深入浅出 Spring Security(十二)】使用第三方(Github)授权登录

    (Github授权登录的具体操作在目录第三“章”) 下面是《深入浅出Spring Security》书中的一段概述: OAuth 是一个开放标准(现在所说的 OAuth 一般都是指 OAuth2,即 2.0 版本),可以理解为是一种协议,该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头

    2024年02月10日
    浏览(42)
  • c#获取句柄,并对第三方软件的输入框和按钮进行控制

    刚学了没多久,还有很多地方没有理解到位,还请大家指正。 当程序运行起来,就会显示在任务管理器中,软件中的每个事件,比如按钮,文本框等一些控件,每个事件都会产生一个句柄,句柄就是这些事件的标识符。如果拿到句柄就可以自己写软件对第三方软件进行控制。

    2024年02月16日
    浏览(24)
  • ARM交叉编译入门及交叉编译第三方库常见问题解析

    交叉编译简单说来,就是编译成果物的地儿不是你运行这个成果物的地儿。最常见的场景,就是我们要编译一个 ARM版本 的可执行程序,但我们编译这个 ARM版本 可执行程序的地方,是在一个 x86_x64 的平台上。 绝大部分的原因,是目标平台不具备编译成果物的算力。具体说来

    2023年04月26日
    浏览(72)
  • 【iOS】—— 实现WebSocket发送消息(SocketRocket第三方库的使用和解析)

    偶然之间了解到了利用WebSocket实现后端和前端的相互发送消息,就查了查在iOS里这个东西该怎么写,用舍友写的接口简单实现了两个用户的通信。 WebSocket 是一种在 Web 应用程序中实现双向通信的协议。它允许客户端和服务器之间建立一个持久性的连接,以便可以在任何时间点

    2024年02月15日
    浏览(41)
  • 【Spring教程11】Spring框架实战:IOC/DI注解开发管理第三方bean的全面深入详解

    欢迎大家回到《 Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《 如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《 纯注解开发模式下的依赖注入和读取properties配置文件》 前面定义bean的时

    2024年02月04日
    浏览(41)
  • 供应链安全和第三方风险管理:讨论如何应对供应链中的安全风险,以及评估和管理第三方合作伙伴可能带来的威胁

      在当今数字化时代,供应链的安全性越来越受到重视。企业的成功不仅仅依赖于产品和服务的质量,还取决于供应链中的安全性。然而,随着供应链越来越复杂,第三方合作伙伴的参与也带来了一系列安全风险。本文将探讨供应链安全和第三方风险管理的关键问题,并通过

    2024年02月12日
    浏览(31)
  • 138. 第三方系统或者工具通过 HTTP 请求发送给 ABAP 系统的数据,应该如何解析

    本教程第 37 篇文章,我们介绍了如何在 SAP ABAP 系统 SICF 事务码 里,开发一段 ABAP 代码,用来响应通过浏览器或者第三方工具,比如 curl,Postman 发起的 HTTP 请求。 31. 如何让 ABAP 服务器能够响应通过浏览器发起的自定义 HTTP 请求 在实际的 ABAP 集成项目中,这种方式非常使用。

    2024年03月21日
    浏览(33)
  • python使用第三方库PyPDF2、PDFMiner或pdfplumber来解析PDF文件

    使用第三方库PyPDF2、PDFMiner或pdfplumber来解析PDF文件可以实现PDF文件的内容提取、搜索和修改等功能。下面是使用PDFMiner来解析PDF文件的安装说明和代码示例: PDFMiner 下面是一些PDFMiner的常见操作: 1.安装PDFMiner库:在Python环境中,可以使用pip命令安装PDFMiner库。 2.导入PDFMiner库

    2024年02月09日
    浏览(41)
  • 【196】JAVA8 用 DOM 方式的 API 解析XML文件,无需引入第三方依赖。

    JAVA8 可以使用标准的 DOM 方式的 API 来编写代码解析 XML 文件,无需引入第三方依赖。下面是两个测试用的 XML 文件: test.xml test2.xml 负责接收所有信息的 AllDataDTO.java 负责接收用户信息的 AllDataUserDTO.java 处理 XML 文件的工具类,XmlUtils.java 用于测试效果的类 Main.java 输出结果:

    2024年01月22日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包