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

.NET Core首例Office開源跨平臺組件(NPOI Core)

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

前言

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

NPOI 的介紹不多說了,不了解的可以看一下 NPOI百度百科 的介紹,在此感謝瞿總和他的團隊的貢獻。

NPOI 的移植之路并非想象的那么容易,因為其依賴了 System.Drawing 和 System.Window.Forms 兩個組件,還有一個第三方的 SharpZipLib 庫,在 GitHub 克隆了***的代碼并且轉換為 NetStandrad 1.6 編譯之后,出現(xiàn)了數不清的錯誤,應該有上千個吧,在經過一天的努力之后(包括刪除,修改,重寫),錯誤數量已經減少到了100多個,50多個,20多個,編譯通過。

在移植的過程中可以真切感受到當初NPOI的作者在寫這些代碼時候的辛苦努力,因為NPOI最初是基于 .Net Framework 1.1 框架寫的,那個時候沒有泛型,沒有var,沒有很多的現(xiàn)成的類庫,全都是靠最基礎的一些數據結構來實現(xiàn),雖然里面的很多種寫法在目前看來可以很大程序的精簡,但是在當時的條件下 真的是不容易。

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

怎么辦? 于是,又一次重構開始了,有了前一次的重構經驗之后,這一次可謂是輕車熟路了,NPOI Core 庫 里面使用了很多.NET Core netstandrad 標準不支持的 Hashtable 和 ArrayList 等數據結構,這些已經被新的泛型 Directory 和 List 替代了,還有依賴的 SharpZipLib 等壓縮組件也都替換成了 NetStandrad 的實現(xiàn),當然還有其他很多雜七雜八的就不細說了,***,終于 netstandrad 1.6 下編譯通過。

通過之后,本地 visual studio 下 新建了一個項目,簡單測試了導出 Excel 的功能,沒問題,也沒有報錯,心里很開心...。 這個時候我在想,最關鍵的就是能不能在Linux上正常運行了,其實這個時候我心里想我已經把依賴于.NET Framework 的各種類都換成了net standrad了,應該問題不大了。

然后在一頓 dotnet publish 之后,把部署包傳到了 Linux 下進行測試,果然,運行通過,并沒有拋出任何異常,而且Excel也生成了,把Excel傳輸到windows上使用office打開,***...

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

在通過測試之后,本想著把這次調整的代碼以 PR 的形式推送給原作者的時候,發(fā)現(xiàn)好像原作者已經不維護這個項目了,無奈,只能自己發(fā)布NuGet了。

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

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

NuGet :


image

Getting Started

導出 Excel

本示例代碼包含:

  • 多個 Sheet

  • 合并單元格

  • 自動調整列寬

  • 填充背景色

  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("這是單元格內容,可以設置很長,看能不能自動調整列寬"); 
  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); 

導出 Word

本示例代碼包含:

  • 設置段落對其方式

  • 設置段落字體

  • 設置段落縮進

  • 這是字體大小

  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("這里是標題"); 
  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); 

總結

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

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

如果你對 .NET Core 感興趣可以關注我,我會定期在博客分享關于 .NET Core 的學習心得。


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

責任編輯:張燕妮 來源: 博客園
相關推薦

2022-08-29 07:05:30

零代碼產品.NET Core

2023-10-07 08:06:55

2024-02-26 07:31:26

WindowsLinuxmacOS

2023-12-05 07:48:27

.NET開源

2025-01-15 00:01:00

開發(fā)應用界面

2018-08-20 08:03:46

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

2019-08-07 14:25:21

.NET.NET Core 3編程語言

2024-06-11 09:00:00

異步編程代碼

2024-09-09 07:37:51

AspJWT權限

2021-06-06 13:07:06

.NETWindowsLinux

2021-12-05 18:22:20

.NETLS Cipher套件

2021-06-05 23:41:47

NET異常 HttpClient

2024-09-30 09:48:41

RabbitMQ消息中間件

2024-06-27 10:48:48

2021-04-28 09:56:44

鴻蒙HarmonyOS應用

2024-03-13 13:44:43

開發(fā)插件開源

2024-11-12 07:28:39

2019-01-22 10:04:13

微軟瀏覽器Windows

2011-08-18 11:10:49

Core Plot框架IOS開發(fā)

2021-03-12 00:04:52

網關Api
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国内精品久久久久久 | 91资源在线| 涩涩鲁亚洲精品一区二区 | 色片在线观看 | 久久久久久免费毛片精品 | 午夜在线 | 视频在线一区二区 | 国产精品黄视频 | 精品在线一区 | 福利视频网站 | 成人欧美一区二区三区白人 | 一区二区精品 | 天天操夜夜骑 | 日韩欧美精品在线 | 成人欧美一区二区三区在线观看 | 日韩在线播放视频 | 中文字幕在线视频一区二区三区 | 国产精品一区一区 | 99re热这里只有精品视频 | 国产视频福利在线观看 | 亚洲精品一区二区网址 | 黄色免费三级 | 在线免费观看黄视频 | 亚洲三区视频 | 国产高清视频一区 | 在线视频国产一区 | 国产日韩欧美在线观看 | 国产日韩精品一区二区 | 国产亚洲精品精品国产亚洲综合 | 国产一区二区影院 | 中文字幕三区 | 国产乱码精品一品二品 | 欧美国产日韩一区二区三区 | 亚洲精品一二三区 | 午夜精品一区二区三区在线播放 | 夜夜夜夜夜夜曰天天天 | 鸡毛片| 国产成人综合久久 | 国产999精品久久久 日本视频一区二区三区 | 91看片在线观看 | 国产精品99免费视频 |