成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.NET Core首例Office開(kāi)源跨平臺(tái)組件(NPOI Core)

開(kāi)發(fā) 后端
最近項(xiàng)目中,需要使用到 Excel 導(dǎo)出,找了一圈發(fā)現(xiàn)沒(méi)有適用于 .NET Core的,不依賴(lài)Office和操作系統(tǒng)限制的 Office 組件,于是萌生了把 NPOI 適配并移植到 .NET Core 的想法。

前言

最近項(xiàng)目中,需要使用到 Excel 導(dǎo)出,找了一圈發(fā)現(xiàn)沒(méi)有適用于 .NET Core的,不依賴(lài)Office和操作系統(tǒng)限制的 Office 組件,于是萌生了把 NPOI 適配并移植到 .NET Core 的想法。

NPOI 的介紹不多說(shuō)了,不了解的可以看一下 NPOI百度百科 的介紹,在此感謝瞿總和他的團(tuán)隊(duì)的貢獻(xiàn)。

NPOI 的移植之路并非想象的那么容易,因?yàn)槠湟蕾?lài)了 System.Drawing 和 System.Window.Forms 兩個(gè)組件,還有一個(gè)第三方的 SharpZipLib 庫(kù),在 GitHub 克隆了***的代碼并且轉(zhuǎn)換為 NetStandrad 1.6 編譯之后,出現(xiàn)了數(shù)不清的錯(cuò)誤,應(yīng)該有上千個(gè)吧,在經(jīng)過(guò)一天的努力之后(包括刪除,修改,重寫(xiě)),錯(cuò)誤數(shù)量已經(jīng)減少到了100多個(gè),50多個(gè),20多個(gè),編譯通過(guò)。

在移植的過(guò)程中可以真切感受到當(dāng)初NPOI的作者在寫(xiě)這些代碼時(shí)候的辛苦努力,因?yàn)镹POI最初是基于 .Net Framework 1.1 框架寫(xiě)的,那個(gè)時(shí)候沒(méi)有泛型,沒(méi)有var,沒(méi)有很多的現(xiàn)成的類(lèi)庫(kù),全都是靠最基礎(chǔ)的一些數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn),雖然里面的很多種寫(xiě)法在目前看來(lái)可以很大程序的精簡(jiǎn),但是在當(dāng)時(shí)的條件下 真的是不容易。

在通過(guò)編譯之后,心里想著應(yīng)該問(wèn)題不大了,于是測(cè)試了一下,不幸的是,各種問(wèn)題,又經(jīng)過(guò)半天的調(diào)整之后,打算放棄了。 于是又去 github 上面搜索看看有沒(méi)有其他什么解決方案之類(lèi)的,無(wú)意間搜索到了一個(gè) NPOI.Core 的一個(gè)項(xiàng)目,是一個(gè)老外移植的 NPOI 到Core平臺(tái),原來(lái)已經(jīng)有人做了Core的移植了,克隆下來(lái)之后發(fā)現(xiàn)編譯不過(guò),又進(jìn)去看了一下代碼,這個(gè)庫(kù)目前依賴(lài)于Windows平臺(tái),而我們項(xiàng)目是運(yùn)行在CentOS的,其并不能在Linux上運(yùn)行,看來(lái)還是空歡喜一場(chǎng)。

怎么辦? 于是,又一次重構(gòu)開(kāi)始了,有了前一次的重構(gòu)經(jīng)驗(yàn)之后,這一次可謂是輕車(chē)熟路了,NPOI Core 庫(kù) 里面使用了很多.NET Core netstandrad 標(biāo)準(zhǔn)不支持的 Hashtable 和 ArrayList 等數(shù)據(jù)結(jié)構(gòu),這些已經(jīng)被新的泛型 Directory 和 List 替代了,還有依賴(lài)的 SharpZipLib 等壓縮組件也都替換成了 NetStandrad 的實(shí)現(xiàn),當(dāng)然還有其他很多雜七雜八的就不細(xì)說(shuō)了,***,終于 netstandrad 1.6 下編譯通過(guò)。

通過(guò)之后,本地 visual studio 下 新建了一個(gè)項(xiàng)目,簡(jiǎn)單測(cè)試了導(dǎo)出 Excel 的功能,沒(méi)問(wèn)題,也沒(méi)有報(bào)錯(cuò),心里很開(kāi)心...。 這個(gè)時(shí)候我在想,最關(guān)鍵的就是能不能在Linux上正常運(yùn)行了,其實(shí)這個(gè)時(shí)候我心里想我已經(jīng)把依賴(lài)于.NET Framework 的各種類(lèi)都換成了net standrad了,應(yīng)該問(wèn)題不大了。

然后在一頓 dotnet publish 之后,把部署包傳到了 Linux 下進(jìn)行測(cè)試,果然,運(yùn)行通過(guò),并沒(méi)有拋出任何異常,而且Excel也生成了,把Excel傳輸?shù)絯indows上使用office打開(kāi),***...

然后緊接著就是繼續(xù)各種測(cè)試了,在測(cè)試到 Word 的導(dǎo)出功能時(shí)候,出問(wèn)題了。因?yàn)镹POI 天生對(duì)Word的功能支持的并不是很完善,心想是不是.NET Framewok下導(dǎo)出也不行啊,于是又新建的一個(gè).NET Framework的項(xiàng)目,使用NPOI Team提供的 dll 測(cè)試,發(fā)現(xiàn)可以導(dǎo)出。然后就開(kāi)始跟代碼,各種測(cè)試,重構(gòu),最終Word的導(dǎo)出功能也沒(méi)有問(wèn)題了。緊接著又發(fā)到了Linux上測(cè)試,沒(méi)有問(wèn)題,心里的石頭落地了。

在通過(guò)測(cè)試之后,本想著把這次調(diào)整的代碼以 PR 的形式推送給原作者的時(shí)候,發(fā)現(xiàn)好像原作者已經(jīng)不維護(hù)這個(gè)項(xiàng)目了,無(wú)奈,只能自己發(fā)布NuGet了。

于是我就把它重新發(fā)布到 NuGet 了,如果使用的過(guò)程中有問(wèn)題,大家可以去我的github下面提交 issue。

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

NuGet :


image

Getting Started

導(dǎo)出 Excel

本示例代碼包含:

  • 多個(gè) Sheet

  • 合并單元格

  • 自動(dòng)調(diào)整列寬

  • 填充背景色

  1. var newFile = @"newbook.core.xlsx"
  2.  
  3. using (var fs = new FileStream(newFile, FileMode.Create, FileAccess.Write)) { 
  4.  
  5.     IWorkbook workbook = new XSSFWorkbook(); 
  6.  
  7.     ISheet sheet1 = workbook.CreateSheet("Sheet1"); 
  8.  
  9.     sheet1.AddMergedRegion(new CellRangeAddress(00010)); 
  10.     var rowIndex = 0
  11.     IRow row = sheet1.CreateRow(rowIndex); 
  12.     row.Height = 30 * 80
  13.     row.CreateCell(0).SetCellValue("這是單元格內(nèi)容,可以設(shè)置很長(zhǎng),看能不能自動(dòng)調(diào)整列寬"); 
  14.     sheet1.AutoSizeColumn(0); 
  15.     rowIndex++; 
  16.  
  17.  
  18.     var sheet2 = workbook.CreateSheet("Sheet2"); 
  19.     var style1 = workbook.CreateCellStyle(); 
  20.     style1.FillForegroundColor = HSSFColor.Blue.Index2; 
  21.     style1.FillPattern = FillPattern.SolidForeground; 
  22.  
  23.     var style2 = workbook.CreateCellStyle(); 
  24.     style2.FillForegroundColor = HSSFColor.Yellow.Index2; 
  25.     style2.FillPattern = FillPattern.SolidForeground; 
  26.  
  27.     var cell2 = sheet2.CreateRow(0).CreateCell(0); 
  28.     cell2.CellStyle = style1; 
  29.     cell2.SetCellValue(0); 
  30.  
  31.     cell2 = sheet2.CreateRow(1).CreateCell(0); 
  32.     cell2.CellStyle = style2; 
  33.     cell2.SetCellValue(1); 
  34.  
  35.     cell2 = sheet2.CreateRow(2).CreateCell(0); 
  36.     cell2.CellStyle = style1; 
  37.     cell2.SetCellValue(2); 
  38.  
  39.     cell2 = sheet2.CreateRow(3).CreateCell(0); 
  40.     cell2.CellStyle = style2; 
  41.     cell2.SetCellValue(3); 
  42.  
  43.     cell2 = sheet2.CreateRow(4).CreateCell(0); 
  44.     cell2.CellStyle = style1; 
  45.     cell2.SetCellValue(4); 
  46.  
  47.     workbook.Write(fs); 

導(dǎo)出 Word

本示例代碼包含:

  • 設(shè)置段落對(duì)其方式

  • 設(shè)置段落字體

  • 設(shè)置段落縮進(jìn)

  • 這是字體大小

  1. var newFile2 = @"newbook.core.docx"
  2. using (var fs = new FileStream(newFile2, FileMode.Create, FileAccess.Write)) { 
  3.     XWPFDocument doc = new XWPFDocument(); 
  4.     var p0 = doc.CreateParagraph(); 
  5.     p0.Alignment = ParagraphAlignment.CENTER; 
  6.     XWPFRun r0 = p0.CreateRun(); 
  7.     r0.FontFamily = "microsoft yahei"
  8.     r0.FontSize = 18
  9.     r0.IsBold = true
  10.     r0.SetText("這里是標(biāo)題"); 
  11.  
  12.     var p1 = doc.CreateParagraph(); 
  13.     p1.Alignment = ParagraphAlignment.LEFT; 
  14.     p1.IndentationFirstLine = 500
  15.     XWPFRun r1 = p1.CreateRun(); 
  16.     r1.FontFamily = "仿宋"
  17.     r1.FontSize = 12
  18.     r1.IsBold = true
  19.     r1.SetText("這里是正文,這里是正文這里是正文這里是正文這里是正文這里是正文這里是正文這里是正文這里是正文這里是正文這里是正文這里是正文"); 
  20.  
  21.     doc.Write(fs); 

總結(jié)

據(jù)不完全統(tǒng)計(jì),這應(yīng)該是 .NET Core 首例 Office 跨平臺(tái) 組件了,大家如果在使用的過(guò)程中有什么問(wèn)題,可以在 Github 上提交Issue(盡量使用英文)。當(dāng)然更希望你能夠提交 PR 來(lái)幫助一起完善 NPOI。

如果你覺(jué)得本篇博客對(duì)您有幫助的話,感謝您的【推薦】。

如果你對(duì) .NET Core 感興趣可以關(guān)注我,我會(huì)定期在博客分享關(guān)于 .NET Core 的學(xué)習(xí)心得。


本文地址:http://www.cnblogs.com/savorboard/p/netcore-npoi.html
作者博客:Savorboard

責(zé)任編輯:張燕妮 來(lái)源: 博客園
相關(guān)推薦

2022-08-29 07:05:30

零代碼產(chǎn)品.NET Core

2023-10-07 08:06:55

2024-02-26 07:31:26

WindowsLinuxmacOS

2023-12-05 07:48:27

.NET開(kāi)源

2025-01-15 00:01:00

開(kāi)發(fā)應(yīng)用界面

2021-04-28 09:56:44

鴻蒙HarmonyOS應(yīng)用

2021-06-06 13:07:06

.NETWindowsLinux

2018-08-20 08:03:46

跨平臺(tái) Web操作系統(tǒng)

2019-08-07 14:25:21

.NET.NET Core 3編程語(yǔ)言

2024-06-11 09:00:00

異步編程代碼

2021-12-05 18:22:20

.NETLS Cipher套件

2024-09-09 07:37:51

AspJWT權(quán)限

2021-06-05 23:41:47

NET異常 HttpClient

2024-09-30 09:48:41

RabbitMQ消息中間件

2024-06-27 10:48:48

2024-03-13 13:44:43

開(kāi)發(fā)插件開(kāi)源

2024-11-12 07:28:39

2019-01-22 10:04:13

微軟瀏覽器Windows

2011-08-18 11:10:49

Core Plot框架IOS開(kāi)發(fā)

2021-03-12 00:04:52

網(wǎng)關(guān)Api
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲一区二区三区国产 | 亚洲小视频在线观看 | 国产精品一区二区三区99 | 99久久夜色精品国产亚洲96 | 精品国产1区2区3区 一区二区手机在线 | 日韩精品av一区二区三区 | 91网视频| 中文字幕第九页 | 日韩欧美一区二区三区 | 久久精品欧美视频 | 黄网站免费在线观看 | 欧美男人亚洲天堂 | 自拍偷拍一区二区三区 | 欧美精品久久久 | 狠狠视频 | 亚洲精品大片 | 亚洲天堂一区二区 | 日韩免费一区 | 中文字幕日本一区二区 | 一级aaaaaa毛片免费同男同女 | 国产视频黄色 | 波多野结衣中文字幕一区二区三区 | 国产毛片久久久 | 亚洲第一av | 亚洲国产精品99久久久久久久久 | 香蕉婷婷| 欧美一级做性受免费大片免费 | a在线免费观看 | 香蕉婷婷 | 成人小视频在线观看 | 午夜视频一区二区三区 | www.99热.com| 欧美日韩国产一区二区三区 | 国产精品美女久久久久aⅴ国产馆 | 最新中文字幕第一页视频 | 毛片a级 | 亚洲va欧美va人人爽午夜 | 欧美日韩在线综合 | 久久免费国产视频 | 亚洲视频免费在线观看 | 久久精品色视频 |