日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
.NETCore首例Office開源跨平臺(tái)組件(NPOICore)

前言

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),青白江企業(yè)網(wǎng)站建設(shè),青白江品牌網(wǎng)站建設(shè),網(wǎng)站定制,青白江網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,青白江網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

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

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

NPOI 的移植之路并非想象的那么容易,因?yàn)槠湟蕾嚵?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ò)一天的努力之后(包括刪除,修改,重寫),錯(cuò)誤數(shù)量已經(jīng)減少到了100多個(gè),50多個(gè),20多個(gè),編譯通過(guò)。

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

在通過(guò)編譯之后,心里想著應(yīng)該問(wèn)題不大了,于是測(cè)試了一下,不幸的是,各種問(wèn)題,又經(jīng)過(guò)半天的調(diào)整之后,打算放棄了。 于是又去 github 上面搜索看看有沒有其他什么解決方案之類的,無(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ù)目前依賴于Windows平臺(tái),而我們項(xiàng)目是運(yùn)行在CentOS的,其并不能在Linux上運(yùn)行,看來(lái)還是空歡喜一場(chǎng)。

怎么辦? 于是,又一次重構(gòu)開始了,有了前一次的重構(gòu)經(jīng)驗(yàn)之后,這一次可謂是輕車熟路了,NPOI Core 庫(kù) 里面使用了很多.NET Core netstandrad 標(biāo)準(zhǔn)不支持的 Hashtable 和 ArrayList 等數(shù)據(jù)結(jié)構(gòu),這些已經(jīng)被新的泛型 Directory 和 List 替代了,還有依賴的 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 的功能,沒問(wèn)題,也沒有報(bào)錯(cuò),心里很開心...。 這個(gè)時(shí)候我在想,最關(guān)鍵的就是能不能在Linux上正常運(yùn)行了,其實(shí)這個(gè)時(shí)候我心里想我已經(jīng)把依賴于.NET Framework 的各種類都換成了net standrad了,應(yīng)該問(wèn)題不大了。

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

然后緊接著就是繼續(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)出。然后就開始跟代碼,各種測(cè)試,重構(gòu),最終Word的導(dǎo)出功能也沒有問(wèn)題了。緊接著又發(fā)到了Linux上測(cè)試,沒有問(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 :

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(0, 0, 0, 10)); 
  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。

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

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


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


新聞標(biāo)題:.NETCore首例Office開源跨平臺(tái)組件(NPOICore)
文章出自:http://m.5511xx.com/article/ccdjsco.html