千家信息网

.NET Core首例Office开源跨平台组件NPOI Core怎么用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章为大家展示了.NET Core首例Office开源跨平台组件NPOI Core怎么用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前言最近项目中,需要
千家信息网最后更新 2026年11月02日.NET Core首例Office开源跨平台组件NPOI Core怎么用

本篇文章为大家展示了.NET Core首例Office开源跨平台组件NPOI Core怎么用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

前言

最近项目中,需要使用到 Excel 导出,找了一圈发现没有适用于 .NET Core的,不依赖Office和操作系统限制的 Office 组件,于是萌生了把 NPOI 适配并移植到 .NET Core 的想法。

NPOI 的移植之路并非想象的那么容易,因为其依赖了 System.Drawing 和 System.Window.Forms 两个组件,还有一个第三方的 SharpZipLib 库,在 GitHub 克隆了最新的代码并且转换为 NetStandrad 1.6 编译之后,出现了数不清的错误,应该有上千个吧,在经过一天的努力之后(包括删除,修改,重写),错误数量已经减少到了100多个,50多个,20多个,编译通过。

在移植的过程中可以真切感受到当初NPOI的作者在写这些代码时候的辛苦努力,因为NPOI最初是基于 .Net Framework 1.1 框架写的,那个时候没有泛型,没有var,没有很多的现成的类库,全都是靠最基础的一些数据结构来实现,虽然里面的很多种写法在目前看来可以很大程序的精简,但是在当时的条件下 真的是不容易。

在通过编译之后,心里想着应该问题不大了,于是测试了一下,不幸的是,各种问题,又经过半天的调整之后,打算放弃了。 于是又去 github 上面搜索看看有没有其他什么解决方案之类的,无意间搜索到了一个 NPOI.Core 的一个项目,是一个老外移植的 NPOI 到Core平台,原来已经有人做了Core的移植了,克隆下来之后发现编译不过,又进去看了一下代码,这个库目前依赖于Windows平台,而我们项目是运行在CentOS的,其并不能在Linux上运行,看来还是空欢喜一场。

怎么办? 于是,又一次重构开始了,有了前一次的重构经验之后,这一次可谓是轻车熟路了,NPOI Core 库 里面使用了很多.NET Core netstandrad 标准不支持的 Hashtable 和 ArrayList 等数据结构,这些已经被新的泛型 Directory 和 List 替代了,还有依赖的 SharpZipLib 等压缩组件也都替换成了 NetStandrad 的实现,当然还有其他很多杂七杂八的就不细说了,最后,终于 netstandrad 1.6 下编译通过。

通过之后,本地 visual studio 下 新建了一个项目,简单测试了导出 Excel 的功能,没问题,也没有报错,心里很开心...。 这个时候我在想,最关键的就是能不能在Linux上正常运行了,其实这个时候我心里想我已经把依赖于.NET Framework 的各种类都换成了net standrad了,应该问题不大了。

然后在一顿 dotnet publish 之后,把部署包传到了 Linux 下进行测试,果然,运行通过,并没有抛出任何异常,而且Excel也生成了,把Excel传输到windows上使用office打开,完美...

然后紧接着就是继续各种测试了,在测试到 Word 的导出功能时候,出问题了。因为NPOI 天生对Word的功能支持的并不是很完善,心想是不是.NET Framewok下导出也不行啊,于是又新建的一个.NET Framework的项目,使用NPOI Team提供的 dll 测试,发现可以导出。然后就开始跟代码,各种测试,重构,最终Word的导出功能也没有问题了。紧接着又发到了Linux上测试,没有问题,心里的石头落地了。

在通过测试之后,本想着把这次调整的代码以 PR 的形式推送给原作者的时候,发现好像原作者已经不维护这个项目了,无奈,只能自己发布NuGet了。

于是我就把它重新发布到 NuGet 了,如果使用的过程中有问题,大家可以去我的github下面提交 issue。

GitHub : https://github.com/yuleyule66/Npoi.Core

NuGet :

Getting Started

导出 Excel

本示例代码包含:

  • 多个 Sheet

  • 合并单元格

  • 自动调整列宽

  • 填充背景色

var newFile = @"newbook.core.xlsx";
using (var fs = new FileStream(newFile, FileMode.Create, FileAccess.Write)) { IWorkbook workbook = new XSSFWorkbook(); ISheet sheet1 = workbook.CreateSheet("Sheet1"); sheet1.AddMergedRegion(new CellRangeAddress(0, 0, 0, 10));
var rowIndex = 0; IRow row = sheet1.CreateRow(rowIndex); row.Height = 30 * 80; row.CreateCell(0).SetCellValue("这是单元格内容,可以设置很长,看能不能自动调整列宽"); sheet1.AutoSizeColumn(0); rowIndex++;
var sheet2 = workbook.CreateSheet("Sheet2");
var style1 = workbook.CreateCellStyle(); style1.FillForegroundColor = HSSFColor.Blue.Index2; style1.FillPattern = FillPattern.SolidForeground;
var style2 = workbook.CreateCellStyle(); style2.FillForegroundColor = HSSFColor.Yellow.Index2; style2.FillPattern = FillPattern.SolidForeground;
var cell2 = sheet2.CreateRow(0).CreateCell(0); cell2.CellStyle = style1; cell2.SetCellValue(0); cell2 = sheet2.CreateRow(1).CreateCell(0); cell2.CellStyle = style2; cell2.SetCellValue(1); cell2 = sheet2.CreateRow(2).CreateCell(0); cell2.CellStyle = style1; cell2.SetCellValue(2); cell2 = sheet2.CreateRow(3).CreateCell(0); cell2.CellStyle = style2; cell2.SetCellValue(3); cell2 = sheet2.CreateRow(4).CreateCell(0); cell2.CellStyle = style1; cell2.SetCellValue(4); workbook.Write(fs);}
导出 Word

本示例代码包含:

  • 设置段落对其方式

  • 设置段落字体

  • 设置段落缩进

  • 这是字体大小

var newFile2 = @"newbook.core.docx";
using (var fs = new FileStream(newFile2, FileMode.Create, FileAccess.Write)) { XWPFDocument doc = new XWPFDocument();
var p0 = doc.CreateParagraph(); p0.Alignment = ParagraphAlignment.CENTER; XWPFRun r0 = p0.CreateRun(); r0.FontFamily = "microsoft yahei"; r0.FontSize = 18; r0.IsBold = true; r0.SetText("这里是标题");
var p1 = doc.CreateParagraph(); p1.Alignment = ParagraphAlignment.LEFT; p1.IndentationFirstLine = 500; XWPFRun r1 = p1.CreateRun(); r1.FontFamily = "仿宋"; r1.FontSize = 12; r1.IsBold = true; r1.SetText("这里是正文,这里是正文这里是正文这里是正文这里是正文这里是正文这里是正文这里是正文这里是正文这里是正文这里是正文这里是正文"); doc.Write(fs);}

上述内容就是.NET Core首例Office开源跨平台组件NPOI Core怎么用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

正文 测试 问题 代码 时候 项目 组件 移植 功能 多个 编译 调整 运行 就是 段落 重构 首例 不大 内容 单元 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网产品 科技股互联网 互联网科技深圳 金融科技还是互联网 未来的互联网科技 百单互联网科技有限公司 互联网科技公司的市场部门 安控科技rtu产品工业互联网 湖南诚度互联网科技有限公司 乌鲁木齐新华智原互联网科技学校 滨湖区互联网智能科技产品有哪些 张召忠谈中国互联网科技 江苏互联网科技小贷 广东鹅鹅鹅互联网科技有限公司 福建互联网展示科技馆设计 吉林省码上互联网科技电话 互联网时代科技型公司的机会 同城互联网络科技 盐城市攀科互联网科技有限公司 互联网大会出现的黑科技 厦门中拓互联网络科技有限公司 互联网科技开发公司 中国 科技 互联网 西安互联网科技公司 上海万想互联网科技 成都仁贤领冠互联网科技有限公司 博兴的互联网电子科技公司 洛阳共同富裕互联网科技有限公司 互联网金融科技公司的优势 众联互联网络科技
0