架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 41604|回复: 2

[资料] NPOI 操作 Excel 详解

[复制链接]
发表于 2021-5-16 21:04:14 | 显示全部楼层 |阅读模式
NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。
回顾:

NPOI 单元格日期类型的判断
https://www.itsvse.com/thread-9649-1-1.html

使用 NPOI 将图片导入到 Excel 表格[附源码]
https://www.itsvse.com/thread-9477-1-1.html

NPOI设置单元格的宽度和高度
https://www.itsvse.com/thread-3522-1-1.html

.Net之NPOI读写操作Excel表格插件
https://www.itsvse.com/thread-2288-1-1.html

Assembly名称
模块/命名空间
说明
NPOI.DLL
NPOI.POIFS
OLE2/ActiveX文档属性读写库
NPOI.DLL
NPOI.DDF
微软Office Drawing读写库
NPOI.DLL
NPOI.HPSF
OLE2/ActiveX文档读写库
NPOI.DLL
NPOI.HSSF
微软Excel BIFF(Excel 97-2003, doc)格式读写库
NPOI.DLL
NPOI.SS
Excel公用接口及Excel公式计算引擎
NPOI.DLL
NPOI.Util
基础类库,提供了很多实用功能,可用于其他读写文件格式项目的开发
NPOI.OOXML.DLL
NPOI.XSSF
Excel 2007(xlsx)格式读写库
NPOI.OOXML.DLL
NPOI.XWPF
Word 2007(docx)格式读写库
NPOI.OpenXml4Net.DLL
NPOI.OpenXml4Net
OpenXml底层zip包读写库
NPOI.OpenXmlFormats.DLL
NPOI.OpenXmlFormats
微软Office OpenXml对象关系库

HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls
XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx
自动识别 Excel 版本

在读取 excel 的时候,npoi 调用 WorkbookFactory.Create 可以自动识别版本:



源码地址:超链接登录可见。

QQ截图20210516202725.jpg

实现代码:

XSSFWorkbook 2007 抛出 Cannot access a closed Stream 异常



测试代码:



在将文件输出到流的时候,调用 Write 方法会抛出异常:

QQ截图20210516202852.jpg

Unhandled exception. System.ObjectDisposedException: Cannot access a closed Stream.
   at System.IO.MemoryStream.Seek(Int64 offset, SeekOrigin loc)

HSSFWorkbook 就没有这个问题,IWorkbook 接口 Write 并没有重载的方法,如下图:

QQ截图20210516203209.jpg

但是 XSSFWorkbook 对象会多出一个 leaveOpen 参数,源码地址:超链接登录可见。

QQ截图20210516203611.jpg

解决方式一:

解决方式二:

新建 NpoiMemoryStream 对象,重写 Close 方法,如下:

使用如下:

XSSFWorkbook CopySheet 异常

当 sheet 是我自定义的模板的时候,调用 CopySheet 方法,会抛出如下异常:

Object reference not set to an instance of an object.

使用 CloneSheet 克隆 sheet,代码如下:

QQ截图20210516205915.jpg

(完)




上一篇:Redis MISCONF Redis is configured to save RDB snapshots
下一篇:【转】C#/.NET 将 Stream 保存到文件的方法
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-9-17 09:46:51 | 显示全部楼层
kk 学习一下
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2023-1-29 15:03:59 | 显示全部楼层
向小渣渣学习
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2025-6-15 21:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表