NPOI使用手冊1

轉自鏈接

目錄

1.認識NPOI

2.使用NPOI生成xls文件

2.1創(chuàng)建基本內(nèi)容

2.1.1創(chuàng)建Workbook和Sheet

2.1.2創(chuàng)建DocumentSummaryInformation和SummaryInformation

2.1.3創(chuàng)建單元格

2.1.5創(chuàng)建批注

2.1.6創(chuàng)建頁眉和頁腳

2.2單元格操作

2.2.1設置格式

2.2.2合并單元格

2.2.3對齊相關設置

2.2.4使用邊框

2.2.5字體設置

2.2.6背景和紋理

2.2.7設置寬度和高度

2.3使用Excel公式

2.3.1基本計算

2.3.2 SUM函數(shù)

2.3.3日期函數(shù)

2.3.4字符串相關函數(shù)


NPOI 1.2教程- 1認識NPOI

1.1什么是NPOI

NPOI递宅,顧名思義漓踢,就是POI的.NET版本逆害。那POI又是什么呢菠剩?POI是一套用Java寫成的庫关炼,能夠幫助開發(fā)者在沒有安裝微軟Office的情況下讀寫Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等苏章。在本文發(fā)布時铸抑,POI的最新版本是3.5 beta 6。

NPOI 1.x是基于POI 3.x版本開發(fā)的侄刽,與poi 3.2對應的版本是NPOI 1.2指黎,目前最新發(fā)布的版本是1.2.1,在該版本中僅支持讀寫Excel文件和Drawing格式州丹,其他文件格式將在以后的版本中得到支持醋安。

1.2版權說明

NPOI采用的是Apache 2.0許可證(poi也是采用這個許可證),這意味著它可以被用于任何商業(yè)或非商業(yè)項目墓毒,你不用擔心因為使用它而必須開放你自己的源代碼吓揪,所以它對于很多從事業(yè)務系統(tǒng)開發(fā)的公司來說絕對是很不錯的選擇。

當然作為一個開源許可證所计,肯定也是有一些義務的柠辞,例如如果你在系統(tǒng)中使用NPOI,你必須保留NPOI中的所有聲明信息主胧。對于源代碼的任何修改叭首,必須做出明確的標識习勤。

完整的apache 2.0許可證請見http://www.phpx.com/man/Apache-2/license.html

1.3相關資源

官方網(wǎng)站:http://npoi.codeplex.com/

POIFS Browser 1.2

下載地址:http://npoi.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24305

QQ交流群:? 78142590

1.4團隊介紹

Tony Qu來自于中國上海,是這個項目的發(fā)起人和開發(fā)人員焙格,時區(qū)是GMT+8图毕,2008年9月開始了NPOI的開發(fā),負責NPOI所有底層庫的開發(fā)眷唉、測試和bug修復予颤。

個人blog地址為http://tonyqus.cnblogs.com/

NPOI 1.2教程- 2.1.1創(chuàng)建Workbook和Sheet

作者:Tony Qu

NPOI官方網(wǎng)站:http://npoi.codeplex.com/

創(chuàng)建Workbook說白了就是創(chuàng)建一個Excel文件,當然在NPOI中更準確的表示是在內(nèi)存中創(chuàng)建一個Workbook對象流冬阳。

本節(jié)作為第2章的開篇章節(jié)蛤虐,將做較為詳細的講解,以幫助NPOI的學習者更好的理解NPOI的組成和使用摩泪。

NPOI.HSSF是專門負責Excel BIFF格式的命名空間笆焰,供開發(fā)者使用的對象主要位于NPOI.HSSF.UserModel和NPOI.HSSF.Util命名空間下劫谅,下面我們要講到的Workbook的創(chuàng)建用的就是NPOI.HSSF.UserModel.HSSFWorkbook類见坑,這個類負責創(chuàng)建.xls文檔。

在開始創(chuàng)建Workbook之前捏检,我們先要在項目中引用一些必要的NPOI assembly荞驴,如下所示:

NPOI.dll

NPOI.POIFS.dll

NPOI.HSSF.dll

NPOI.Util.dll

要創(chuàng)建一個新的xls文件其實很簡單,只要我們初始化一個新的HSSFWorkbook實例就行了贯城,如下所示:

usingNPOI.HSSF.UserModel;

...

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

是不是很方便啊熊楼,沒有任何參數(shù)或設置,但這么創(chuàng)建有一些限制能犯,這樣創(chuàng)建出來的Workbook在Excel中打開是會報錯的鲫骗,因為Excel規(guī)定一個Workbook必須至少帶1個Sheet,這也是為什么在Excel界面中踩晶,新建一個Workbook默認都會新建3個Sheet执泰。所以必須加入下面的創(chuàng)建Sheet的代碼才能保證生成的文件正常:

HSSFSheetsheet = hssfworkbook.CreateSheet("newsheet");

如果要創(chuàng)建標準的Excel文件,即擁有3個Sheet渡蜻,可以用下面的代碼:

hssfworkbook.CreateSheet("Sheet1");

hssfworkbook.CreateSheet("Sheet2");

hssfworkbook.CreateSheet("Sheet3");

最后就是把這個HSSFWorkbook實例寫入文件了术吝,代碼也很簡單,如下所示:

FileStreamfile =newFileStream(@"test.xls", FileMode.Create);

hssfworkbook.Write(file);

file.Close();

這里假設文件名是test.xls茸苇,排苍,在創(chuàng)建完FileStream之后,直接調(diào)用HSSFWorkbook類的Write方法就可以了学密。

最后你可以打開test.xls文件確認一下淘衙,是不是有3個空的Sheet。

相關范例請見NPOI 1.2正式版中的CreateEmptyExcelFile項目腻暮。

NPOI 1.2教程- 2.1.2創(chuàng)建DocumentSummaryInformation和SummaryInformation

作者:Tony Qu

NPOI官方網(wǎng)站:http://npoi.codeplex.com/

昨天收到了不少回復彤守,有msn上的漩氨,也有blog上的,我代表NPOI Team向所有支持和關注NPOI的兄弟表示感謝遗增,讓我們共同完善NPOI叫惊。

前一節(jié)中我們講解了如何創(chuàng)建一個新的Workbook,但在此過程中大家也許會發(fā)現(xiàn)一個細節(jié)做修,這些文件沒有包括DocummentSummaryInformation和SummaryInformation頭霍狰。如果你還不是很清楚我在說什么,可以看POIFS Browser打開test.xls文件后的截圖:

你會發(fā)現(xiàn)只有Workbook目錄饰及,其他什么都沒有蔗坯,但事實上一個正常的xls文件,比如說Excel生成的xls文件是類似下面的結構:

是不是多出來DocumentSummaryInformation和SummaryInformation兩個頭燎含?很多人可能對DocumentSummaryInformation和SummaryInformation很陌生宾濒,可能第一次聽說這玩意,沒事屏箍,這很正常绘梦,因為普通用戶很少會去使用這些東西,但它們其實比想象中有用赴魁。

請看上圖中的信息卸奉,如作者、標題颖御、標記榄棵、備注、主題等信息潘拱,其實這些信息都是存儲在DocummentSummaryInformation和SummaryInformation里面的疹鳄,這么一說我想大家應該明白了吧,這些信息是為了快速提取文件信息準備芦岂。在Windows XP中瘪弓,也有對應的查看和修改界面,只是沒有Vista這么方便盔腔,如下所示:

這恐怕也是很多人對于這些信息漠不關心的原因吧杠茬,因為沒有人愿意通過右擊文件->屬性這樣復雜的操作去查看一些摘要信息。

提示

DocummentSummaryInformation和SummaryInformation并不是Office文件的專利弛随,只要是OLE2格式瓢喉,都可以擁有這兩個頭信息,主要目的就是為了在沒有完整讀取文件數(shù)據(jù)的情況下獲得文件的摘要信息舀透,同時也可用作桌面搜素的依據(jù)栓票。要了解DocummentSummaryInformation的全部屬性請見http://msdn.microsoft.com/en-us/library/aa380374(VS.85).aspx;要了解SummaryInformation的全部屬性請見http://msdn.microsoft.com/en-us/library/aa369794(VS.85).aspx

好了走贪,說到這里佛猛,我想大家對于接下來我們要創(chuàng)建的內(nèi)容有了初步的認識,下面我們就馬上動手創(chuàng)建坠狡。

首先引用以下這些命名空間:

usingNPOI.HSSF.UserModel;

usingNPOI.HPSF;

usingNPOI.POIFS.FileSystem;

其中與DocummentSummaryInformation和SummaryInformation密切相關的是HPSF命名空間继找。

首先創(chuàng)建Workbook

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

然后創(chuàng)建DocumentSummaryInformation

DocumentSummaryInformationdsi = PropertySetFactory.CreateDocumentSummaryInformation();

dsi.Company ="NPOI Team";

再創(chuàng)建SummaryInformation

SummaryInformationsi = PropertySetFactory.CreateSummaryInformation();

si.Subject ="NPOI SDK Example";

因為是范例,這里僅各設置了一個屬性逃沿,其他都沒有設置婴渡。

現(xiàn)在我們把創(chuàng)建好的對象賦給Workbook,這樣才能保證這些信息被寫入文件凯亮。

hssfworkbook.DocumentSummaryInformation= dsi;

hssfworkbook.SummaryInformation= si;

最后和2.1.1節(jié)一樣边臼,我們把Workbook通過FileStream寫入文件。

相關范例請見NPOI 1.2正式版中的CreatePOIFSFileWithProperties

NPOI 1.2教程- 2.1.3創(chuàng)建單元格

作者:Tony Qu

NPOI官方網(wǎng)站:http://npoi.codeplex.com/

用過Excel的人都知道假消,單元格是Excel最有意義的東西柠并,我們做任何操作恐怕都要和單元格打交道。在Excel中我們要添加一個單元格只需要點擊任何一個單元格富拗,然后輸入內(nèi)容就是了臼予,但是Excel底層其實沒有這么簡單,不同的單元格是有不同的類型的媒峡,比如說數(shù)值單元格是用NumberRecord表示瘟栖,文本單元格是用LabelSSTRecord表示,空單元格是用BlankRecord表示谅阿。這也就意味著,在設置單元格時酬滤,你必須告訴NPOI你需要創(chuàng)建哪種類型的單元格签餐。

要創(chuàng)建單元格首先要創(chuàng)建單元格所在的行,比如盯串,下面的代碼創(chuàng)建了第0行:

HSSFSheetsheet1 = hssfworkbook.CreateSheet("Sheet1");

HSSFRowrow1=sheet1.CreateRow(0);

行建好了氯檐,就可以建單元格了,比如創(chuàng)建A1位置的單元格:

row1.CreateCell(0).SetCellValue(1);

這里要說明一下体捏,SetCellValue有好幾種重載冠摄,你可以設置單元格為bool、double几缭、DateTime河泳、string和HSSFRichTextString類型。其中對于string類型的重載調(diào)用的就是HSSFRichTextString類型的重載年栓,所以是一樣的拆挥,HSSFRichTextString可用于有字體或者Unicode的文本。

如果你覺得每一行要聲明一個HSSFRow很麻煩某抓,可以用下面的方式:

sheet1.CreateRow(0).CreateCell(0).SetCellValue("This is a Sample");

這么用有個前提纸兔,那就是第0行還沒創(chuàng)建過惰瓜,否則得這么用:

sheet1.GetRow(0).CreateCell(0).SetCellValue("This is a Sample");

注意:這里的行在Excel里是從1開始的,但是NPOI內(nèi)部是從0開始的汉矿;列在Excel里面是用字母表示的崎坊,而NPOI中也是用從0開始的數(shù)字表示的,所以要注意轉換洲拇。

如果你要獲得某一個已經(jīng)創(chuàng)建的單元格對象流强,可以用下面的代碼:

sheet1.GetRow(row_index).GetCell(column_index);

本節(jié)僅講解最基本的單元格創(chuàng)建,有關單元格格式設置呻待、樣式等高級話題請見:2.2節(jié)單元格相關操作打月。

相關范例請見NPOI 1.2正式版中的SetCellValuesInXls項目。

NPOI 1.2教程- 2.1.4創(chuàng)建批注

作者:Tony Qu

NPOI官方網(wǎng)站:http://npoi.codeplex.com/

很多人不怎么用Excel中的批注蚕捉,所以我特地截了張圖奏篙,讓大家知道本節(jié)我們要創(chuàng)建的到底是什么東西。

在過去迫淹,我們恐怕沒有辦法實現(xiàn)這一功能秘通,因為無論是cvs法、html法敛熬、oledb法都沒有提供這樣的接口肺稀,當然Office PIA法可以做到,但是性能實在太差应民,而且穩(wěn)定性不好话原,經(jīng)常莫名其妙crash(這是某某兄弟給我的反饋,我引用了下诲锹,呵呵)繁仁。在以后的教程中,你將看到更多在過去無法通過傳統(tǒng)方法實現(xiàn)的東西归园,好戲才剛剛開始黄虱。

批注主要有三個屬性需要設置,一個是批注的位置和大小庸诱、一個是批注的文本捻浦、還有一個是批注的作者。

批注的位置和大小桥爽,在Excel中是與單元格密切相關的朱灿,NPOI中通過HSSFClientAnchor的實例來表示,它的構造函數(shù)比較復雜聚谁,有8個參數(shù)母剥,它們分別是

參數(shù)說明

dx1第1個單元格中x軸的偏移量

dy1第1個單元格中y軸的偏移量

dx2第2個單元格中x軸的偏移量

dy2第2個單元格中y軸的偏移量

col1第1個單元格的列號

row1第1個單元格的行號

col2第2個單元格的列號

row2第2個單元格的行號

例如,如果我們打算讓注釋顯示在B3和E5之間,就應該這么寫:

HSSFPatriarchpatr = sheet.CreateDrawingPatriarch();

HSSFCommentcomment1 = patr.CreateComment(newHSSFClientAnchor(0, 0, 0, 0, 1, 2 , 4, 4));

下面我們設置這個批注的內(nèi)容和作者环疼,這個比較簡單:

comment1.String=newHSSFRichTextString("Hello World");

comment1.Author="NPOI Team";

最后一步就是把批注賦給某個單元格:

HSSFCell cell= sheet.CreateRow(1).CreateCell(1);

cell.CellComment= comment1;

對于批注习霹,你有兩種選擇,一種是隱藏(默認)炫隶,一種是顯示(即表單一打開就顯示該批注)淋叶,可以通過comment1.Visible屬性來控制。

看了上面這張圖大家就應該明白了伪阶,這里有2個批注煞檩,下面那個是顯示的,上面那個是隱藏的栅贴。

相關范例請見NPOI 1.2正式版中的SetCellCommentInXls斟湃。

NPOI 1.2教程- 2.1.6創(chuàng)建頁眉和頁腳

作者:Tony Qu

NPOI官方網(wǎng)站:http://npoi.codeplex.com/

很多人并不知道Excel的頁眉和頁腳功能,因為在界面上是顯示不了頁眉和頁腳的檐薯,必須在打印頁面中才能看到凝赛,這也直接導致了其設置界面也顯得更隱秘,你必須進入頁面設置–>頁眉和頁腳才能設置坛缕。以下是Office 2007中的設置界面墓猎。

當你按“自定義頁眉”或“自定義頁腳”時,你會看到以下界面赚楚,Excel把頁眉毙沾、頁腳分成了左中右三部分,這一點絕非單純體現(xiàn)在界面上宠页,在底層的存儲中也是如此左胞。如果你設置的是“左”的內(nèi)容,底層的存儲字符串就會在開頭加上&L勇皇,如果是“右”的內(nèi)容則會加上&R罩句,所以HeaderRecord中的字符串看上去是這樣的:"&C&LFooter A&R”,這個字符串的意思是僅設置了“左”的內(nèi)容敛摘,內(nèi)容是Footer A。

看了這些我想你應該對頁眉和頁腳有所了解了乳愉,回過頭來說NPOI兄淫,NPOI中主要是靠HSSFSheet.Header和HSSFSheet.Footer來設置的,這兩個屬性分別是HSSFHeader和HSSFFooter類型的蔓姚。

參考代碼如下:

HSSFSheet s1= hssfworkbook.CreateSheet("Sheet1");

s1.CreateRow(0).CreateCell(1).SetCellValue(123);

//set headertext

s1.Header.Center="This is a test sheet";

//set footertext

s1.Footer.Left="Copyright NPOI Team";

s1.Footer.Right="created by Tony Qu(瞿杰)";

以上代碼中我添加了頁眉的Center內(nèi)容捕虽,F(xiàn)ooter的Left和Right內(nèi)容,在打印預覽中看到的效果大概是這樣的:

頁眉

頁腳

至于一些Excel特殊字符坡脐,比如說頁碼可以用&P泄私,當前日期可以用&D,其他的東西你就自己研究吧。

本范例完整代碼請見NPOI.Examples中的CreateHeaderFooterInXls項目晌端。

NPOI 1.2教程- 2.2.1設置單元格格式

作者:Tony Qu

NPOI官方網(wǎng)站:http://npoi.codeplex.com/

在Excel中我們經(jīng)常要設置格式捅暴,比如說日期格式(yyyymmdd)、小數(shù)點格式(1.20)咧纠、貨幣格式($2000)蓬痒、百分比格式(99.99%)等等,這些東西在過去我們恐怕只能在服務器端生成好漆羔,不但增加了服務器端的代碼量梧奢,還造成了不必要的字符串替換操作,如今NPOI將讓服務器從這種完全沒有必要的操作中解放出來演痒,一切都將由Excel在客戶端處理亲轨。

使用NPOI時要注意,所有的格式都是通過CellStyle.DataFormat賦給單元格的鸟顺,而不是直接賦給單元格惦蚊。

案例一日期格式

假設我們現(xiàn)在需要顯示的日期的格式為2008年5月5日,可以用下面的代碼生成:

HSSFSheetsheet = hssfworkbook.CreateSheet("newsheet");

HSSFCell cell= sheet.CreateRow(0).CreateCell(0);

cell.SetCellValue(newDateTime(2008,5,5));

//set dateformat

HSSFCellStylecellStyle = hssfworkbook.CreateCellStyle();

HSSFDataFormatformat = hssfworkbook.CreateDataFormat();

cellStyle.DataFormat= format.GetFormat("yyyy年m月d日");

cell.CellStyle=cellStyle;

由于這里的“yyyy年m月d日”屬于自定義格式(區(qū)別于Excel內(nèi)嵌的格式),所以必須用hssfworkbook.CreateDataFormat()創(chuàng)建一個HSSFDataFormat實例,然后使用format.GetFormat來獲取相應的格式博其,只要是Excel支持的格式表示方式罚随,這種方式都能夠實現(xiàn)。

案例二保留2位小數(shù)

假設我們有個單元格的值為1.2乡革,怎么顯示成1.20呢?在Excel中可以用“0.00”來表示,所以下面的代碼就能完成:

// Create arow and put some cells in it. Rows are 0 based.

HSSFCell cell= sheet.CreateRow(0).CreateCell(0);

//set valuefor the cell

cell.SetCellValue(1.2);

//numberformat with 2 digits after the decimal point - "1.20"

HSSFCellStylecellStyle = hssfworkbook.CreateCellStyle();

cellStyle.DataFormat= HSSFDataFormat.GetBuiltinFormat("0.00");

cell.CellStyle= cellStyle;

這里與上面有所不同巫湘,用的是HSSFDataFormat.GetBuiltinFormat()方法,之所以用這個昏鹃,是因為0.00是Excel內(nèi)嵌的格式尚氛,完整的Excel內(nèi)嵌格式列表大家可以看這個窗口中的自定義列表:

這里就不一一列出了。

案例三貨幣格式

貨幣格式在金融的項目中經(jīng)常用到洞渤,比如說人民幣符號¥阅嘶,美元符號$等,這里可以用下面的代碼表示:

HSSFCellcell2 = sheet.CreateRow(1).CreateCell(0);

cell2.SetCellValue(20000);

HSSFCellStylecellStyle2 = hssfworkbook.CreateCellStyle();

HSSFDataFormatformat = hssfworkbook.CreateDataFormat();

cellStyle2.DataFormat= format.GetFormat("¥#,##0");

cell2.CellStyle= cellStyle2;

注意载迄,這里還加入了千分位分隔符讯柔,所以是#,##,至于為什么這么寫护昧,你得去問微軟魂迄,呵呵。

案例四百分比

百分比在報表中也很常用惋耙,其實基本上和上面一樣捣炬,只是格式表示是0.00%熊昌,代碼如下:

cellStyle4.DataFormat= HSSFDataFormat.GetBuiltinFormat("0.00%");

由于這里是內(nèi)嵌格式,所以直接用HSSFDataFormat.GetBuiltinFormat即可湿酸。

案例五中文大寫

在表示金額時婿屹,我們時常會用到,我也見過不少兄弟實現(xiàn)了數(shù)字轉中文大小寫的工具類稿械,以后你可以嘗試讓Excel去處理這一切选泻,代碼和剛才差不多,也是改格式的表示:

HSSFDataFormatformat = hssfworkbook.CreateDataFormat();

cellStyle6.DataFormat= format.GetFormat("[DbNum2][$-804]0");

由于是自定義格式美莫,所以用了HSSFDataFormat.GetFormat页眯,相信你對這兩種獲取格式的形式的區(qū)別越來越熟悉了。

案例六科學計數(shù)法

這東西數(shù)學課上我們都學過厢呵,雖然用的不多窝撵,但是既然Excel支持,這里也提一下:

cellStyle3.DataFormat= HSSFDataFormat.GetBuiltinFormat("0.00E+00");

下面展示下以上這些例子的顯示效果:

最后總結一下HSSFDataFormat.GetFormat和HSSFDataFormat.GetBuiltinFormat的區(qū)別:

當使用Excel內(nèi)嵌的(或者說預定義)的格式時襟铭,直接用HSSFDataFormat.GetBuiltinFormat靜態(tài)方法即可碌奉。

當使用自己定義的格式時,必須先調(diào)用HSSFWorkbook.CreateDataFormat()寒砖,因為這時在底層會先找有沒有匹配的內(nèi)嵌FormatRecord赐劣,如果沒有就會新建一個FormatRecord,所以必須先調(diào)用這個方法哩都,然后你就可以用獲得的HSSFDataFormat實例的GetFormat方法了魁兼,當然相對而言這種方式比較麻煩,所以內(nèi)嵌格式還是用HSSFDataFormat.GetBuiltinFormat靜態(tài)方法更加直接一些漠嵌。不過自定義的格式也不是天馬行空隨便定義咐汞,還是要參照Excel的格式表示來定義,具體請看相關的Excel教程儒鹿。

注意:自定義的FormatRecord是嵌入xls文件內(nèi)部的化撕,所以不用擔心對方Excel中有沒有定義過這種格式,都是能夠正常使用的约炎。

相關范例請參考NPOI 1.2正式版中的NumberFormatInXls項目植阴。

NPOI 1.2教程- 2.2.2單元格合并

作者:Tony Qu

NPOI官方網(wǎng)站:http://npoi.codeplex.com/

合并單元格在制作表格時很有用,比如說表格的標題就經(jīng)常是把第一行的單元格合并居中圾浅。那么在NPOI中應該如何實現(xiàn)單元格的合并呢墙贱?

為了實現(xiàn)這一功能,NPOI引入了新的概念贱傀,即Region,因為合并單元格伊脓,其實就是設定一個區(qū)域府寒。下面說一下Region類的參數(shù)魁衙,Region總共有4個參數(shù),如下所示

Region的參數(shù)說明

FirstRow區(qū)域中第一個單元格的行號

FirstColumn區(qū)域中第一個單元格的列號

LastRow區(qū)域中最后一個單元格的行號

LastColumn區(qū)域中最后一個單元格的列號

由于單元格的合并都是在表的基礎上建立的株搔,所以我們得先建Sheet:

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

HSSFSheetsheet = hssfworkbook.CreateSheet("newsheet");

接下來我們根據(jù)實際場景來做一些演示剖淀。

場景一標題行的合并

這種場景是最常見的,比如說我們要建立一張銷售情況表纤房,英文叫Sales Report

我們先設置居中和字體樣式纵隔,這里我們采用20號字體,代碼如下:

HSSFRow row =sheet.CreateRow(0);

HSSFCell cell= row.CreateCell(0);

cell.SetCellValue("Sales Report");

HSSFCellStylestyle = hssfworkbook.CreateCellStyle();

style.Alignment= HSSFCellStyle.ALIGN_CENTER;

HSSFFont font= hssfworkbook.CreateFont();

font.FontHeight= 20*20;

style.SetFont(font);

cell.CellStyle= style;

要產(chǎn)生圖中的效果炮姨,即把A1:F1這6個單元格合并捌刮,然后添加合并區(qū)域:

sheet.AddMergedRegion(newRegion(0, 0, 0,5));

場景二多行合并

看完場景一,你可不要認為多行合并就需要一行一行做舒岸,其實也只需要一行代碼绅作,比如說我們要把C3:E5合并為一個單元格,那么就可以用下面的代碼:

sheet.AddMergedRegion(newRegion(2, 2, 4,4));

提示即使你沒有用CreateRow和CreateCell創(chuàng)建過行或單元格蛾派,也完全可以直接創(chuàng)建區(qū)域然后把這一區(qū)域合并俄认,Excel的區(qū)域合并信息是單獨存儲的,和RowRecord洪乍、ColumnInfoRecord不存在直接關系眯杏。

相關范例請參考NPOI 1.2正式版中的MergedCellInXls項目。

NPOI 1.2教程- 2.2.3單元格對齊相關設置

作者:Tony Qu

NPOI官方網(wǎng)站:http://npoi.codeplex.com/

本節(jié)將圍繞“對齊”選項卡中的設置展開壳澳,雖然實際上你會發(fā)現(xiàn)該選項卡中的很多設置和對齊沒有什么關系岂贩。合并單元格已經(jīng)在2.2.2節(jié)講過了,這里就不提了钾埂。

首先我們用代碼創(chuàng)建必要的單元格河闰,代碼如下:

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

HSSFSheetsheet1 = hssfworkbook.CreateSheet("Sheet1");

HSSFRow row =sheet1.CreateRow(0);

row.CreateCell(0).SetCellValue("Test");

這里我們假設在A0單元格中加入了文本Test。

請注意接下來我們要做的所有操作都是在CellStyle的基礎上完成的褥紫,所以我們創(chuàng)建一個HSSFCellStyle:

HSSFCellStylestyle=hssfworkbook.CreateCellStyle();

水平對齊

這里用的是HSSFCellStyle.Alignment姜性,默認值自然是常規(guī),即HSSFCellStyle.ALIGN_GENERAL髓考。

如果是左側對齊就是

style.Alignment= HSSFCellStyle.ALIGN_LEFT;

如果是居中對齊就是

style.Alignment= HSSFCellStyle.ALIGN_CENTER;

如果是右側對齊就是

style.Alignment= HSSFCellStyle.ALIGN_RIGHT;

如果是跨列舉中就是

style.Alignment= HSSFCellStyle.ALIGN_CENTER_SELECTION;

如果是兩端對齊就是

style.Alignment= HSSFCellStyle.ALIGN_JUSTIFY;

如果是填充就是

style.Alignment= HSSFCellStyle.ALIGN_FILL;

注意:以上選項僅當有足夠的寬度時才能產(chǎn)生效果部念,不設置寬度恐怕看不出區(qū)別。

垂直對齊

這里用的是HSSFCellStyle.VerticalAlignment氨菇,默認值為居中儡炼,即HSSFCellStyle.VERTICAL_CENTER

如果是靠上就是

style.VerticalAlignment=HSSFCellStyle.VERTICAL_TOP

如果是居中就是

style.VerticalAlignment=HSSFCellStyle.VERTICAL_CENTER

如果是靠下就是

style.VerticalAlignment=HSSFCellStyle.VERTICAL_BOTTOM

如果是兩端對齊就是

style.VerticalAlignment=HSSFCellStyle.VERTICAL_JUSTIFY

注意:以上選項僅當有足夠的高度時才能產(chǎn)生效果,不設置高度恐怕看不出區(qū)別查蓉。

自動換行

自動換行翻譯成英文其實就是Wrap的意思乌询,所以這里我們應該用WrapText屬性,這是一個布爾屬性

style.WrapText=true;

效果如下所示:

文本縮進

這是一個不太引人注意的選項豌研,所以這里給張圖出來妹田,讓大家知道是什么唬党,縮進說白了就是文本前面的空白,我們同樣可以用屬性來設置鬼佣,這個屬性叫做Indention驶拱。

style.Indention= 3;

文本旋轉

文本方向大家一定在Excel中設置過,上圖中就是調(diào)整界面晶衷,主要參數(shù)是度數(shù)蓝纲,那么我們?nèi)绾卧贜POI中設置呢?

style.Rotation=(short)90;

以上代碼是把單元格A1中的文本逆時針旋轉90度晌纫,等同于下圖中的設置:

請注意税迷,這里的Rotation取值是從-90到90,而不是0-180度缸匪。

最后別忘了把樣式變量style賦給HSSFCellStyle.CellStyle翁狐,否則就前功盡棄了,呵呵凌蔬!

以上的一些功能露懒,比如文本旋轉和自動換行,使用傳統(tǒng)的cvs和html法恐怕是無法實現(xiàn)的砂心。隨著學習的不斷深入懈词,你將越來越意識到使用NPOI生成Excel其實如此簡單。

相關范例請參考NPOI 1.2正式版中的SetAlignmentInXls和RotateTextInXls辩诞。

NPOI 1.2教程- 2.2.4設置單元格邊框

作者:Tony Qu

NPOI官方網(wǎng)站:http://npoi.codeplex.com/

很多表格中都要使用邊框坎弯,本節(jié)將為你重點講解NPOI中邊框的設置和使用。

邊框和其他單元格設置一樣也是在HSSFCellStyle上操作的译暂,HSSFCellStyle有2種和邊框相關的屬性抠忘,分別是:

邊框相關屬性說明范例

Border+方向邊框類型BorderTop, BorderBottom,BorderLeft, BorderRight

方向+BorderColor邊框顏色TopBorderColor,BottomBorderColor, LeftBorderColor, RightBorderColor

其中邊框類型分為以下幾種:

邊框范例圖對應的靜態(tài)值

HSSFCellStyle.BORDER_DOTTED

HSSFCellStyle.BORDER_HAIR

HSSFCellStyle.BORDER_DASH_DOT_DOT

HSSFCellStyle.BORDER_DASH_DOT

HSSFCellStyle.BORDER_DASHED

HSSFCellStyle.BORDER_THIN

HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT

HSSFCellStyle.BORDER_SLANTED_DASH_DOT

HSSFCellStyle.BORDER_MEDIUM_DASH_DOT

HSSFCellStyle.BORDER_MEDIUM_DASHED

HSSFCellStyle.BORDER_MEDIUM

HSSFCellStyle.BORDER_THICK

HSSFCellStyle.BORDER_DOUBLE

至于顏色那就很多了,全部在HSSFColor下面外永,如HSSFColor.GREEN,HSSFColor.RED崎脉,都是靜態(tài)實例,可以直接引用伯顶。

下面我們假設我們要把一個單元格的四周邊框都設置上囚灼,可以用下面的代碼:

HSSFSheetsheet = hssfworkbook.CreateSheet("newsheet");

// Create arow and put some cells in it. Rows are 0 based.

HSSFRow row =sheet.CreateRow(1);

// Create acell and put a value in it.

HSSFCell cell= row.CreateCell(1);

// Style thecell with borders all around.

HSSFCellStylestyle = hssfworkbook.CreateCellStyle();

style.BorderBottom=HSSFCellStyle.BORDER_THIN;

style.BorderLeft=HSSFCellStyle.BORDER_THIN;

style.BorderRight=HSSFCellStyle.BORDER_THIN;

style.BorderTop= HSSFCellStyle.BORDER_THIN ;

cell.CellStyle=style;

這段代碼使用了最普通的細邊框,使得這個單元格看上去像塊空心磚頭祭衩。

注意:這里我們沒有設置邊框的顏色灶体,但這不會影響最終的效果,因為Excel會用默認的黑色給邊框上色掐暮。

如果要設置顏色的話蝎抽,也很簡單,如下:

style.BottomBorderColor=HSSFColor.GREEN.index;

以上代碼將底部邊框設置為綠色路克,要注意织中,不是直接把HSSFColor.GREEN賦給XXXXBorderColor屬性锥涕,而是把index的值賦給它。

相關范例請參考NPOI 1.2正式版中的SetBorderStyleInXls項目狭吼。

NPOI 1.2教程- 2.2.5設置單元格字體

作者:Tony Qu

NPOI官方網(wǎng)站:http://npoi.codeplex.com/

本節(jié)我們將繼續(xù)使用NPOI來設置單元格格式,這一節(jié)我們主要講如何設置“字體”殖妇。

在設置字體之前刁笙,我們首先要做的就是創(chuàng)建字體對象,這和創(chuàng)建數(shù)字格式很相似谦趣。

HSSFFont font= hssfworkbook.CreateFont();

這句話會在Excel文件內(nèi)部創(chuàng)建相應的FontRecord疲吸,所以你不用客戶因為自己機器上的Excel沒有相應的字體設置而導致設置丟失。

字體在設置完成后前鹅,我們就可以把它賦給單元格樣式摘悴,代碼如下:

HSSFCellStylestyle1 = hssfworkbook.CreateCellStyle();

style1.SetFont(font);

cell1.CellStyle=style1;

這里的cell1是HSSFCell的一個實例。

好了舰绘,下面我們就開始對字體進行設置蹂喻。

字體名稱

這里的字體名稱是通過HSSFFont.FontName進行設置的,至于具體的名稱捂寿,只要是常用字體都可以口四,比如說Arial, Verdana等,當然也可以是中文字體名秦陋,如宋體蔓彩、黑體等。不過設置字體名稱有個前提驳概,那就是假設打開這個xls文件的客戶機上有這種字體赤嚼,如果沒有,Excel將使用默認字體顺又。

下面就是設置字體名稱為“宋體”的代碼:

font.FontName="宋體";

字號

與字號有關的屬性有兩個更卒,一個是FontHeight,一個是FontHeightInPoints待榔。區(qū)別在于逞壁,F(xiàn)ontHeight的值是FontHeightInPoints的20倍,通常我們在Excel界面中看到的字號锐锣,比如說12腌闯,對應的是FontHeightInPoints的值,而FontHeight要產(chǎn)生12號字體的大小雕憔,值應該是240姿骏。所以通常建議你用FontHeightInPoint屬性。

如果要設置字號為12斤彼,代碼就是

font.FontHeightInPoints= 12;

字體顏色

這里可能會與CellStyle上的ForegroundColor和BackgroundColor產(chǎn)生混淆分瘦,其實所有的字體顏色都是在HSSFFont的實例上設置的蘸泻,CellStyle的ForegroundColor和BackgroundColor分別指背景填充色和填充圖案的顏色,和文本顏色無關嘲玫。

要設置字體顏色悦施,我們可以用HSSFFont.Color屬性,顏色可以通過HSSFColor獲得去团,代碼如下所示:

font.Color =HSSFColor.RED.index;

這行代碼把文本設置為紅色抡诞。

下劃線

通常我們所說的下劃線都是單線條的,其實Excel支持好幾種下劃線土陪,如下所示:

類型對應的值

單下劃線HSSFFont.U_SINGLE

雙下劃線HSSFFont.U_DOUBLE

會計用單下劃線HSSFFont.U_SINGLE_ACCOUNTING

會計用雙下劃線HSSFFont.U_DOUBLE_ACCOUNTING

無下劃線HSSFFont.U_NONE

當你要設置下劃線時昼汗,可以用HSSFFont.Underline屬性,這是一個byte類型的值鬼雀,例如

font.Underline=HSSFFont.U_SINGLE

這行代碼就是設置單下劃線的代碼顷窒。

上標下標

設置這東西可以用HSSFFont.TypeOffset屬性,值有以下幾種:

TypeOffset的值說明

HSSFFont.SS_SUPER上標

HSSFFont.SS_SUB下標

HSSFFont.SS_NONE普通源哩,默認值

所以如果你要上標的話鞋吉,可以用下面的代碼:

font.TypeOffset=HSSFFont.SS_SUPER;

刪除線

設置這東西可以用HSSFFont.IsStrikeout屬性,當為true時璧疗,表示有刪除線坯辩;為false則表示沒有刪除線。

相關范例請參考NPOI 1.2正式版中的ApplyFontInXls的項目崩侠。

NPOI 1.2教程- 2.2.6設置單元格的背景和圖案

作者:Tony Qu

NPOI官方網(wǎng)站:http://npoi.codeplex.com/

本節(jié)我們將用NPOI來為單元格添加背景和圖案漆魔。

在之前的教程中,我們已經(jīng)提到HSSFCellStyle有兩個背景顏色屬性却音,一個叫FillBackgroundColor改抡,另一個叫FillForegroundColor,但其實這指的都是背景顏色系瓢,那為什么還有ForegroundColor呢阿纤?為了能夠幫助大家理解,我們舉一個實際的例子夷陋,下面這個圖案是Excel的一個單元格:

線是白色的欠拾,背景是紅色的。這里的線其實就是下面的Excel界面中的圖案:

至于線的顏色則是圖案顏色骗绕,即白色藐窄。

所以以上單元格如果要用NPOI來設置就可以用以下代碼完成:

//fillbackground

HSSFCellStylestyle8 = hssfworkbook.CreateCellStyle();

style8.FillForegroundColor= NPOI.HSSF.Util.HSSFColor.WHITE.index;

style8.FillPattern= HSSFCellStyle.SQUARES;

style8.FillBackgroundColor= NPOI.HSSF.Util.HSSFColor.RED.index;

sheet1.CreateRow(7).CreateCell(0).CellStyle= style8;

現(xiàn)在是不是清楚一些了,這里的FillPattern就圖案樣式酬土,所有的枚舉值都是HSSFCellStyle的常量荆忍;FillForegroundColor就是圖案的顏色,而FillBackgroundColor則是背景的顏色,即紅色刹枉。

下面羅列一下圖案樣式及其對應的值:

圖案樣式常量

HSSFCellStyle.NO_FILL

HSSFCellStyle.ALT_BARS

HSSFCellStyle.FINE_DOTS

HSSFCellStyle.SPARSE_DOTS

HSSFCellStyle.LESS_DOTS

HSSFCellStyle.LEAST_DOTS

HSSFCellStyle.BRICKS

HSSFCellStyle.BIG_SPOTS

HSSFCellStyle.THICK_FORWARD_DIAG

HSSFCellStyle.THICK_BACKWARD_DIAG

HSSFCellStyle.THICK_VERT_BANDS

HSSFCellStyle.THICK_HORZ_BANDS

HSSFCellStyle.THIN_HORZ_BANDS

HSSFCellStyle.THIN_VERT_BANDS

HSSFCellStyle.THIN_BACKWARD_DIAG

HSSFCellStyle.THIN_FORWARD_DIAG

HSSFCellStyle.SQUARES

HSSFCellStyle.DIAMONDS

通過這張表叽唱,你將很容易找到自己需要的樣式,不用再去一個一個猜測了微宝。

相關范例請參考NPOI 1.2正式版中的ColorfullMatrixTable和FillBackgroundInXls棺亭。

NPOI 1.2教程- 2.2.7設置單元格的寬度和高度

作者:Tony Qu

NPOI官方網(wǎng)站:http://npoi.codeplex.com/

在Excel中,單元格的寬度其實就是列的寬度芥吟,因為Excel假設這一列的單元格的寬度肯定一致侦铜。所以要設置單元格的寬度,我們就得從列的寬度下手钟鸵,HSSFSheet有個方法叫SetColumnWidth,共有兩個參數(shù):一個是列的索引(從0開始)涤躲,一個是寬度棺耍。

現(xiàn)在假設你要設置B列的寬度,就可以用下面的代碼:

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

HSSFSheetsheet1 = hssfworkbook.CreateSheet("Sheet1");

sheet1.SetColumnWidth(1,100 * 256);

這里你會發(fā)現(xiàn)一個有趣的現(xiàn)象种樱,SetColumnWidth的第二個參數(shù)要乘以256蒙袍,這是怎么回事呢?其實嫩挤,這個參數(shù)的單位是1/256個字符寬度害幅,也就是說,這里是把B列的寬度設置為了100個字符岂昭。

剛才說的是如何設置以现,那如何去讀取一個列的寬度呢?直接用GetColumnWidth方法约啊,這個方法只有一個參數(shù)邑遏,那就是列的索引號。如下所示:

intcol1width = sheet1.GetColumnWidth(1);

說完寬度恰矩,我們來說高度记盒,在Excel中,每一行的高度也是要求一致的外傅,所以設置單元格的高度纪吮,其實就是設置行的高度,所以相關的屬性也應該在HSSFRow上萎胰,它就是HSSFRow.Height和HeightInPoints碾盟,這兩個屬性的區(qū)別在于HeightInPoints的單位是點,而Height的單位是1/20個點奥洼,所以Height的值永遠是HeightInPoints的20倍巷疼。

要設置第一行的高度,可以用如下代碼:

sheet1.CreateRow(0).Height= 200*20;

或者

sheet1.CreateRow(0).HeightInPoints= 200;

如果要獲得某一行的行高,可以直接拿HSSFRow.Height屬性的返回值嚼沿。

你可能覺得一行一行設置行高或者一列一列設置列寬很麻煩估盘,那你可以考慮使用HSSFSheet.DefaultColumnWidth、HSSFSheet.DefaultRowHeight和HSSFSheet.DefaultRowHeightInPoints屬性骡尽。

一旦設置了這些屬性遣妥,如果某一行或者某一列沒有設置寬度,就會使用默認寬度或高度攀细。代碼如下:

sheet1.DefaultColumnWidth=100*256;

sheet1.DefaultRowHeight=30*20;

相關范例請見NPOI 1.2正式版中的SetWidthAndHeightInXls項目

2.3.1用NPOI操作EXCEL--基本計算

從這節(jié)開始箫踩,我們將開始學習Excel高級一點的功能--公式。為某個單元格指定公式后谭贪,單元格中的類容將根據(jù)公式計算得出境钟,如圖:

圖中設置的是一個基本表達式”1+2*3”,單元格A1中將顯示此表達式計算的結果”7”俭识,如圖所示慨削。對應的C#生成代碼也很簡單,如下:

HSSFSheet?sheet1?=?hssfworkbook.CreateSheet("Sheet1");

HSSFRow?row1=sheet1.CreateRow(

0);

HSSFCell?cel1?=?row1.CreateCell(

0);

HSSFCell?cel2?=?row1.CreateCell(

1);

HSSFCell?cel3?=?row1.CreateCell(

2);

cel1.SetCellFormula(

"1+2*3");

cel2.SetCellValue(

5);

同樣套媚,NPOI也支持單元格引用類型的公式設置缚态,如下圖中的C1=A1*B1。

對應的公式設置代碼為:

cel3.SetCellFormula("A1*B1");

是不是很簡單呢堤瘤?但要注意玫芦,在利用NPOI寫程序時,行和列的計數(shù)都是從0開始計算的本辐,但在設置公式時又是按照Excel的單元格命名規(guī)則來的桥帆。

2.3.2用NPOI操作EXCEL--SUM函數(shù)

這節(jié)我們開始學習Excel中最常用的函數(shù)—Sum求和函數(shù)。

首先师郑,我們先看一上最簡單的Sum函數(shù):Sum(num1,num2,...)环葵。使用效果如圖

圖中的E1=Sum(A1,C1)表示將A1與C1的和填充在E1處,與公式”E1=A1+C1”等效宝冕。對應的生成代碼與上一節(jié)中的基本計算公式類似:

HSSFSheet?sheet1?=?hssfworkbook.CreateSheet("Sheet1");

HSSFRow?row1?=?sheet1.CreateRow(

0);

HSSFCell?cel1?=?row1.CreateCell(

0);

HSSFCell?cel2?=?row1.CreateCell(

1);

HSSFCell?cel3?=?row1.CreateCell(

2);

HSSFCell?celSum1?=?row1.CreateCell(

3);

HSSFCell?celSum2?=?row1.CreateCell(

4);

HSSFCell?celSum3?=?row1.CreateCell(

5);

cel1.SetCellValue(

1);

cel2.SetCellValue(

2);

cel3.SetCellValue(

3);

celSum2.SetCellFormula(

"sum(A1,C1)");

當然张遭,把每一個單元格作為Sum函數(shù)的參數(shù)很容易理解,但如果要求和的單元格很多地梨,那么公式就會很長菊卷,既不方便閱讀也不方便書寫。所以Excel提供了另外一種多個單元格求和的寫法:

如上圖中的“Sum(A1:C1)”表示求從A1到C1所有單元格的和宝剖,相當于A1+B1+C1洁闰。對應的代碼為:

celSum1.SetCellFormula("sum(A1:C1)");

最后,還有一種求和的方法万细。就是先定義一個區(qū)域扑眉,如”range1”,然后再設置Sum(range1),此時將計算區(qū)域中所有單元格的和腰素。定義區(qū)域的代碼為:

HSSFName?range?=?hssfworkbook.CreateName();

range.Reference?=

"Sheet1!$A1:$C1";

range.NameName?=

"range1";

執(zhí)行此代碼后的Excel文件將在的公式菜單下的名稱管理器(Excel2007的菜單路徑,2003稍有不同)中看到如下區(qū)域定義:

給單元格F1加上公式:

celSum3.SetCellFormula("sum(range1)");

生成的Excel如下圖所示:

2.3.3用NPOI操作EXCEL--日期函數(shù)

Excel中有非常豐富的日期處理函數(shù)聘裁,在NPOI中同樣得到了很好的支持。如下圖:對應的與前面的基本公式設置類似:

HSSFSheet?sheet1?=?hssfworkbook.CreateSheet("Sheet1");

HSSFRow?row1?=?sheet1.CreateRow(

0);

HSSFRow?row2?=?sheet1.CreateRow(

1);

row1.CreateCell(

0).SetCellValue("姓名");

row1.CreateCell(

1).SetCellValue("參加工作時間");

row1.CreateCell(

2).SetCellValue("當前日期");

row1.CreateCell(

3).SetCellValue("工作年限");

HSSFCell?cel1?=?row2.CreateCell(

0);

HSSFCell?cel2?=?row2.CreateCell(

1);

HSSFCell?cel3?=?row2.CreateCell(

2);

HSSFCell?cel4?=?row2.CreateCell(

3);

cel1.SetCellValue(

"aTao.Xiang");

cel2.SetCellValue(

newDateTime(2004,7,1));

cel3.SetCellFormula(

"TODAY()");

cel4.SetCellFormula(

"CONCATENATE(DATEDIF(B2,TODAY(),\"y\"),\"年\",DATEDIF(B2,TODAY(),\"ym\"),\"個月\")");

//在poi中日期是以double類型表示的弓千,所以要格式化HSSFCellStyle?cellStyle?=?hssfworkbook.CreateCellStyle();

HSSFDataFormat?format?=?hssfworkbook.CreateDataFormat();

cellStyle.DataFormat?=?format.GetFormat(

"yyyy-m-d");

cel2.CellStyle?=?cellStyle;

cel3.CellStyle?=?cellStyle;

下面對上例中用到的幾個主要函數(shù)作一些說明:

TODAY()

:取得當前日期;

DATEDIF(B2,TODAY(),"y")

:取得B2單元格的日期與前日期以年為單位的時間間隔衡便。(“Y”:表示以年為單位,”m”表示以月為單位;”d”表示以天為單位);

CONCATENATE(str1,str2,...)

:連接字符串。

另外附上Excel中常用的日期函數(shù)列表洋访,只需要將此句代碼作適當修改即可:

cel4.SetCellFormula("CONCATENATE(DATEDIF(B2,TODAY(),\"y\"),\"年\",DATEDIF(B2,TODAY(),\"ym\"),\"個月\")");

函數(shù)名函數(shù)說明語法

DATE返回代表特定日期的系列數(shù)镣陕。DATE(year,month,day)

DATEDIF計算兩個日期之間的天數(shù)、月數(shù)或年數(shù)姻政。DATEDIF(start_date,end_date,unit)

DATEVALUE函數(shù)DATEVALUE的主要功能是將以文字表示的日期轉換成一個系列數(shù)呆抑。DATEVALUE(date_text)

DAY返回以系列數(shù)表示的某日期的天數(shù),用整數(shù)1到31表示汁展。DAY(serial_number)

DAYS360按照一年360天的算法(每個月以30天計理肺,一年共計12個月),返回兩日期間相差的天數(shù)善镰。DAYS360(start_date,end_date,method)

EDATE返回指定日期(start_date)之前或之后指定月份數(shù)的日期系列數(shù)。使用函數(shù)EDATE可以計算與發(fā)行日處于一月中同一天的到期日的日期年枕。EDATE(start_date,months)

EOMONTH返回start-date之前或之后指定月份中最后一天的系列數(shù)炫欺。用函數(shù)EOMONTH可計算特定月份中最后一天的時間系列數(shù),用于證券的到期日等計算熏兄。EOMONTH(start_date,months)

HOUR返回時間值的小時數(shù)品洛。即一個介于0 (12:00 A.M.)到23 (11:00 P.M.)之間的整數(shù)。HOUR(serial_number)

MINUTE返回時間值中的分鐘摩桶。即一個介于0到59之間的整數(shù)桥状。MINUTE(serial_number)

MONTH返回以系列數(shù)表示的日期中的月份。月份是介于1(一月)和12(十二月)之間的整數(shù)硝清。MONTH(serial_number)

NETWORKDAYS返回參數(shù)start-data和end-data之間完整的工作日數(shù)值辅斟。工作日不包括周末和專門指定的假期NETWORKDAYS(start_date,end_date,holidays)

NOW返回當前日期和時間所對應的系列數(shù)。NOW( )

SECOND返回時間值的秒數(shù)芦拿。返回的秒數(shù)為0至59之間的整數(shù)士飒。SECOND(serial_number)

TIME返回某一特定時間的小數(shù)值,函數(shù)TIME返回的小數(shù)值為從0到0.99999999之間的數(shù)值蔗崎,代表從0:00:00 (12:00:00 A.M)到23:59:59 (11:59:59 P.M)之間的時間酵幕。TIME(hour,minute,second)

TIMEVALUE返回由文本串所代表的時間的小數(shù)值。該小數(shù)值為從0到0.999999999的數(shù)值缓苛,代表從0:00:00 (12:00:00 AM)到23:59:59 (11:59:59 PM)之間的時間芳撒。TIMEVALUE(time_text)

TODAY返回當前日期的系列數(shù),系列數(shù)是Microsoft Excel用于日期和時間計算的日期-時間代碼。TODAY( )

WEEKDAY返回某日期為星期幾笔刹。默認情況下芥备,其值為1(星期天)到7(星期六)之間的整數(shù)。WEEKDAY(serial_number,return_type)

WEEKNUM返回一個數(shù)字徘熔,該數(shù)字代表一年中的第幾周门躯。WEEKNUM(serial_num,return_type)

WORKDAY返回某日期(起始日期)之前或之后相隔指定工作日的某一日期的日期值。工作日不包括周末和專門指定的假日酷师。WORKDAY(start_date,days,holidays)

YEAR返回某日期的年份讶凉。返回值為1900到9999之間的整數(shù)。YEAR(serial_number)

YEARFRAC返回start_date和end_date之間的天數(shù)占全年天數(shù)的百分比山孔。YEARFRAC(start_date,end_date,basis)

2.3.4用NPOI操作EXCEL--字符串函數(shù)

這一節(jié)我們開始學習Excel另一類非常常見的函數(shù)—字符串函數(shù)懂讯。在Excel中提供了非常豐富的字符串函數(shù)嘲驾,在NPOI中同樣得到了很好的支持塌鸯。一、大小寫轉換類函數(shù)LOWER(String):將一個文字串中的所有大寫字母轉換為小寫字母挣轨。

UPPER(String)

:將文本轉換成大寫形式串前。

PROPER(String)

:將文字串的首字母及任何非字母字符之后的首字母轉換成大寫瘫里。將其余的字母轉換成小寫。對應的C#代碼與前幾節(jié)講的設置公式的代碼類似:

HSSFRow?row1?=?sheet1.CreateRow(0);

row1.CreateCell(

0).SetCellValue("待操作字符串");

row1.CreateCell(

1).SetCellValue("操作函數(shù)");

row1.CreateCell(

2).SetCellValue("操作結果");

HSSFRow?row2?=?sheet1.CreateRow(

1);

row2.CreateCell(

0).SetCellValue("This?is?a?NPOI?example!");

row2.CreateCell(

1).SetCellValue("LOWER(A2)");

//將此句中的“LOWER(A2)”換成UPPER?(A2)荡碾、PROPER?(A2)可以看到不同效果谨读。row2.CreateCell(2).SetCellFormula("LOWER(A2)");

二、取出字符串中的部分字符

LEFT(text,num_chars)

:LEFT(text,num_chars)其中Text是包含要提取字符的文本串坛吁。Num_chars指定要由LEFT所提取的字符數(shù)劳殖。

MID(text,start_num,num_chars):MID(text,start_num,num_chars)其中Text是包含要提取字符的文本串。Start_num是文本中要提取的第一個字符的位置拨脉,num_chars表示要提取的字符的數(shù)哆姻。

RIGHT(text,num_chars):RIGHT(text,num_chars)其中Text是包含要提取字符的文本串。Num_chars指定希望RIGHT提取的字符數(shù)玫膀。代碼與上面類似矛缨,就不寫了。

三匆骗、去除字符串的空白TRIM(text):其中Text為需要清除其中空格的文本劳景。需要注意的是,與C#中的Trim不同碉就,Excel中的Trim函數(shù)不僅會刪除字符串頭尾的字符盟广,字符串中的多余字符也會刪除,單詞之間只會保留一個空格瓮钥。

四筋量、字符串的比較

EXACT(text1,text2)

:比較兩個字符串是否相等烹吵,區(qū)分大小寫。

執(zhí)行效果如下:

在此只簡單的講了一下常用的函數(shù)桨武,Excel中還有很多的字符串函數(shù)肋拔,在此附上,讀者可以一個一個去測試呀酸。

函數(shù)名函數(shù)說明語法

ASC將字符串中的全角(雙字節(jié))英文字母更改為半角(單字節(jié))字符凉蜂。ASC(text)

CHAR返回對應于數(shù)字代碼的字符,函數(shù)CHAR可將其他類型計算機文件中的代碼轉換為字符性誉。CHAR(number)

CLEAN刪除文本中不能打印的字符窿吩。對從其他應用程序中輸入的字符串使用CLEAN函數(shù),將刪除其中含有的當前操作系統(tǒng)無法打印的字符错览。例如纫雁,可以刪除通常出現(xiàn)在數(shù)據(jù)文件頭部或尾部、無法打印的低級計算機代碼倾哺。CLEAN(text)

CODE返回文字串中第一個字符的數(shù)字代碼轧邪。返回的代碼對應于計算機當前使用的字符集。CODE(text)

CONCATENATE將若干文字串合并到一個文字串中羞海。CONCATENATE (text1,text2,...)

DOLLAR依照貨幣格式將小數(shù)四舍五入到指定的位數(shù)并轉換成文字忌愚。DOLLAR或RMB(number,decimals)

EXACT該函數(shù)測試兩個字符串是否完全相同。如果它們完全相同却邓,則返回TRUE菜循;否則,返回FALSE申尤。函數(shù)EXACT能區(qū)分大小寫,但忽略格式上的差異衙耕。利用函數(shù)EXACT可以測試輸入文檔內(nèi)的文字昧穿。EXACT(text1,text2)

FINDFIND用于查找其他文本串(within_text)內(nèi)的文本串(find_text),并從within_text的首字符開始返回find_text的起始位置編號橙喘。FIND(find_text,within_text,start_num)

FIXED按指定的小數(shù)位數(shù)進行四舍五入时鸵,利用句點和逗號,以小數(shù)格式對該數(shù)設置格式厅瞎,并以文字串形式返回結果饰潜。FIXED(number,decimals,no_commas)

JIS將字符串中的半角(單字節(jié))英文字母或片假名更改為全角(雙字節(jié))字符。JIS(text)

LEFTLEFT基于所指定的字符數(shù)返回文本串中的第一個或前幾個字符和簸。

LEFTB

基于所指定的字節(jié)數(shù)返回文本串中的第一個或前幾個字符彭雾。此函數(shù)用于雙字節(jié)字符。

LEFT(text,num_chars)

LEFTB(text,num_bytes)

LENLEN返回文本串中的字符數(shù)锁保。

LENB

返回文本串中用于代表字符的字節(jié)數(shù)薯酝。此函數(shù)用于雙字節(jié)字符半沽。

LEN(text)

LENB(text)

LOWER將一個文字串中的所有大寫字母轉換為小寫字母。LOWER(text)

MIDMID返回文本串中從指定位置開始的特定數(shù)目的字符吴菠,該數(shù)目由用戶指定者填。

MIDB

返回文本串中從指定位置開始的特定數(shù)目的字符,該數(shù)目由用戶指定做葵。此函數(shù)用于雙字節(jié)字符占哟。

MID(text,start_num,num_chars)

MIDB(text,start_num,num_bytes)

PHONETIC提取文本串中的拼音(furigana)字符。PHONETIC(reference)

PROPER將文字串的首字母及任何非字母字符之后的首字母轉換成大寫酿矢。將其余的字母轉換成小寫榨乎。PROPER(text)

REPLACEREPLACE使用其他文本串并根據(jù)所指定的字符數(shù)替換某文本串中的部分文本。

REPLACEB

使用其他文本串并根據(jù)所指定的字符數(shù)替換某文本串中的部分文本棠涮。此函數(shù)專為雙字節(jié)字符使用谬哀。

REPLACE(old_text,start_num,num_chars,new_text)

REPLACEB(old_text,start_num,num_bytes,new_text)

REPT按照給定的次數(shù)重復顯示文本⊙戏荆可以通過函數(shù)REPT來不斷地重復顯示某一文字串史煎,對單元格進行填充。REPT(text,number_times)

RIGHTRIGHT根據(jù)所指定的字符數(shù)返回文本串中最后一個或多個字符驳糯。

RIGHTB

根據(jù)所指定的字符數(shù)返回文本串中最后一個或多個字符篇梭。此函數(shù)用于雙字節(jié)字符。

RIGHT(text,num_chars)

RIGHTB(text,num_bytes)

SEARCHSEARCH返回從start_num開始首次找到特定字符或文本串的位置上特定字符的編號酝枢。使用SEARCH可確定字符或文本串在其他文本串中的位置恬偷,這樣就可使用MID或REPLACE函數(shù)更改文本。

SEARCHB

也可在其他文本串(within_text)中查找文本串(find_text)帘睦,并返回find_text的起始位置編號袍患。此結果是基于每個字符所使用的字節(jié)數(shù),并從start_num開始的竣付。此函數(shù)用于雙字節(jié)字符诡延。此外,也可使用FINDB在其他文本串中查找文本串古胆。

SEARCH(find_text,within_text,start_num)

SEARCHB(find_text,within_text,start_num)

SUBSTITUTE在文字串中用new_text替代old_text肆良。如果需要在某一文字串中替換指定的文本,請使用函數(shù)SUBSTITUTE逸绎;如果需要在某一文字串中替換指定位置處的任意文本惹恃,請使用函數(shù)REPLACE。SUBSTITUTE(text,old_text,new_text,instance_num)

T將數(shù)值轉換成文本棺牧。T(value)

TEXT將一數(shù)值轉換為按指定數(shù)字格式表示的文本巫糙。TEXT(value,format_text)

TRIM除了單詞之間的單個空格外,清除文本中所有的空格颊乘。在從其他應用程序中獲取帶有不規(guī)則空格的文本時曲秉,可以使用函數(shù)TRIM采蚀。TRIM(text)

UPPER將文本轉換成大寫形式。UPPER(text)

VALUE將代表數(shù)字的文字串轉換成數(shù)字承二。VALUE(text)

WIDECHAR將單字節(jié)字符轉換為雙字節(jié)字符榆鼠。WIDECHAR(text)

YEN使用¥(日圓)貨幣格式將數(shù)字轉換成文本,并對指定位置后的數(shù)字四舍五入亥鸠。YEN(number,decimals)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妆够,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子负蚊,更是在濱河造成了極大的恐慌神妹,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件家妆,死亡現(xiàn)場離奇詭異鸵荠,居然都是意外死亡,警方通過查閱死者的電腦和手機伤极,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門蛹找,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人哨坪,你說我怎么就攤上這事庸疾。” “怎么了当编?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵届慈,是天一觀的道長。 經(jīng)常有香客問我忿偷,道長金顿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任鲤桥,我火速辦了婚禮串绩,結果婚禮上,老公的妹妹穿的比我還像新娘芜壁。我一直安慰自己,他們只是感情好高氮,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布慧妄。 她就那樣靜靜地躺著,像睡著了一般剪芍。 火紅的嫁衣襯著肌膚如雪塞淹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天罪裹,我揣著相機與錄音饱普,去河邊找鬼运挫。 笑死,一個胖子當著我的面吹牛套耕,可吹牛的內(nèi)容都是我干的谁帕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼冯袍,長吁一口氣:“原來是場噩夢啊……” “哼匈挖!你這毒婦竟也來了?” 一聲冷哼從身側響起康愤,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤儡循,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后征冷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體择膝,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年检激,在試婚紗的時候發(fā)現(xiàn)自己被綠了肴捉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡呵扛,死狀恐怖每庆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情今穿,我是刑警寧澤缤灵,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站蓝晒,受9級特大地震影響腮出,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芝薇,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一胚嘲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洛二,春花似錦馋劈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至垒迂,卻和暖如春械姻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背机断。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工楷拳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绣夺,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓欢揖,卻偏偏與公主長得像陶耍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浸颓,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 轉自鏈接 2.3.5 IF函數(shù) 2.3.6 CountIf和SumIf函數(shù) 2.3.7 Lookup函數(shù) 2.3....
    腿毛褲閱讀 12,828評論 0 0
  • 也許你已經(jīng)做了上千張表格物臂,也許你用函數(shù)算了上千復雜的運算。也許認為excel不過如此产上,今天25招秘技希望可以幫到大...
    南屋阿米佛頭閱讀 3,709評論 0 51
  • 一棵磷、誤刪資料恢復 一不小心刪錯了,還把回收站清空了晋涣,咋辦耙敲健?只要三步谢鹊,你就能找回你刪掉并清空回收站的東西算吩。 步驟:...
    八爺君閱讀 1,540評論 2 7
  • 使用首先需要了解他的工作原理 1.POI結構與常用類 (1)創(chuàng)建Workbook和Sheet (2)創(chuàng)建單元格 (...
    長城ol閱讀 8,402評論 2 25
  • 轉自鏈接 3.項目實踐 3.1基于.xls模板生成Excel文件 3.2生成九九乘法表 3.3生成一張工資單 3....
    腿毛褲閱讀 3,420評論 0 0