作者:Tony Qu
企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對(duì)外擴(kuò)展宣傳的重要窗口,一個(gè)合格的網(wǎng)站不僅僅能為公司帶來(lái)巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺(tái),創(chuàng)新互聯(lián)公司面向各種領(lǐng)域:成都自拌料攪拌車(chē)等成都網(wǎng)站設(shè)計(jì)公司、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)解決方案、網(wǎng)站設(shè)計(jì)等建站排名服務(wù)。NPOI官方博客:http://tonyqus.sinaapp.com | 官方QQ群:189925337
可能很多人已經(jīng)習(xí)慣了使用.Net 3.0下的System.IO.Packaging(WindowsBase.dll)來(lái)操作Office 2007/2010的文件格式,以至于大家都默許了.net 2.0下無(wú)法操作OOXML文件的觀(guān)點(diǎn),盡管也有人使用第三方zip類(lèi)庫(kù)來(lái)操作OOXML文件,但是遇到關(guān)系維護(hù)之類(lèi)的問(wèn)題,就開(kāi)始糾結(jié)了,你必須自己去不斷地維護(hù).rels文件(OOXML中用于維護(hù)文件內(nèi)關(guān)系的文件,這里不是后綴名,這個(gè)文件就叫這個(gè)名字。),而且文件的內(nèi)容越復(fù)雜,關(guān)系維護(hù)就越痛苦。盡管微軟出了OpenXml SDK 2.0,但是很遺憾,這套庫(kù)也是基于.net 3.0的。當(dāng)然,我倒不是.net 3.0的堅(jiān)決反對(duì)者,只是出于部署方面的考慮,要知道目前基于.net 2.0的應(yīng)用還是占據(jù)相當(dāng)一部分份額的,盡管.net 3.0/3.5出來(lái)也3年了,但是相對(duì)于.net 2.0而言,只能算剛剛起步,這也是NPOI始終堅(jiān)持.net 2.0版本為主線(xiàn)版本的原因。
有人可能要說(shuō),.net 3.0/3.5不也是基于.net 2.0的嗎?話(huà)是這么說(shuō),但是部署起來(lái),還是要單獨(dú)部署.net 3.0包,不是嗎?相當(dāng)于額外增加一套庫(kù),就拿我目前的公司來(lái)說(shuō),我們?nèi)匀辉谟胿s2005開(kāi)發(fā),服務(wù)器上也只部署了.net 2.0 framework。
poi中有一個(gè)庫(kù)叫OpenXml4j,由Julien Chable于2008年捐贈(zèng)給POI項(xiàng)目,主要負(fù)責(zé)OOXML基礎(chǔ)操作,如創(chuàng)建、讀取、修改、關(guān)系維護(hù)等。最近NPOI團(tuán)隊(duì)完成了OpenXml4j的移植工作,于是就有了NPOI.OpenXml4Net,該組件將包括在NPOI下一個(gè)版本中,目前你可以通過(guò)googlecode的svn獲得完整代碼,自行在本地編譯。OpenXml4Net使用SharpZip作為底層zip操作庫(kù),而非Ionic.Zip,主要原因是SharpZip的設(shè)計(jì)與java中的zip庫(kù)更接近,移植相對(duì)簡(jiǎn)單,所以我們選擇了這條捷徑。不過(guò)有一點(diǎn)要向大家說(shuō)明,OpenXml4Net僅負(fù)責(zé)底層操作,比如創(chuàng)建部件、創(chuàng)建關(guān)系等,但不包括Office上層的功能,如創(chuàng)建xlsx文件、添加單元格等,這只是一個(gè)底層操作庫(kù),NPOI將在后續(xù)版本中陸續(xù)增加,Excel 2007, Word 2007, PowerPoint 2007對(duì)應(yīng)的命名空間分別是NPOI.XSSF, NPOI.XWPF, NPOI.XLSF,NPOI.XSSF按計(jì)劃將在半年內(nèi)完成(預(yù)計(jì)在2012年6月或7月發(fā)布),這次隨本文發(fā)布的算是社區(qū)預(yù)覽版,你可以基于這個(gè)版本給我們提建議和bug。
從頭創(chuàng)建OOXML文件
任何一個(gè)OOXML都是一個(gè)zip文件,在本例中為了方便打開(kāi),我們直接使用.zip作為新建文件的擴(kuò)展名。
//create ooxml file in memory Package p = Package.Create(); //create package parts PackagePartName pn1=new PackagePartName(new Uri("/a/abcd/e",UriKind.Relative),true); if (!p.ContainPart(pn1)) p.CreatePart(pn1, MediaTypeNames.Text.Plain); PackagePartName pn2 = new PackagePartName(new Uri("/b/test.xml", UriKind.Relative), true); if (!p.ContainPart(pn2)) p.CreatePart(pn2, MediaTypeNames.Text.Xml); //save file p.Save("test.zip"); //don't forget to close it p.Close();
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。