温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-12-29 19:44:36 来源:亿速云 阅读:259 作者:柒染 栏目:大数据

本篇文章为大家展示了.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 :
.NET Core首例Office开源跨平台组件NPOI Core怎么用

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怎么用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI