NPOI使用手冊1

轉自鏈接

目錄

1.認識NPOI

2.使用NPOI生成xls文件

2.1創建基本內容

2.1.1創建Workbook和Sheet

2.1.2創建DocumentSummaryInformation和SummaryInformation

2.1.3創建單元格

2.1.5創建批注

2.1.6創建頁眉和頁腳

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函數

2.3.3日期函數

2.3.4字符串相關函數


NPOI 1.2教程- 1認識NPOI

1.1什么是NPOI

NPOI,顧名思義,就是POI的.NET版本。那POI又是什么呢?POI是一套用Java寫成的庫,能夠幫助開發者在沒有安裝微軟Office的情況下讀寫Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。在本文發布時,POI的最新版本是3.5 beta 6。

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

1.2版權說明

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

當然作為一個開源許可證,肯定也是有一些義務的,例如如果你在系統中使用NPOI,你必須保留NPOI中的所有聲明信息。對于源代碼的任何修改,必須做出明確的標識。

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

1.3相關資源

官方網站:http://npoi.codeplex.com/

POIFS Browser 1.2

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

QQ交流群:? 78142590

1.4團隊介紹

Tony Qu來自于中國上海,是這個項目的發起人和開發人員,時區是GMT+8,2008年9月開始了NPOI的開發,負責NPOI所有底層庫的開發、測試和bug修復。

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

NPOI 1.2教程- 2.1.1創建Workbook和Sheet

作者:Tony Qu

NPOI官方網站:http://npoi.codeplex.com/

創建Workbook說白了就是創建一個Excel文件,當然在NPOI中更準確的表示是在內存中創建一個Workbook對象流。

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

NPOI.HSSF是專門負責Excel BIFF格式的命名空間,供開發者使用的對象主要位于NPOI.HSSF.UserModel和NPOI.HSSF.Util命名空間下,下面我們要講到的Workbook的創建用的就是NPOI.HSSF.UserModel.HSSFWorkbook類,這個類負責創建.xls文檔。

在開始創建Workbook之前,我們先要在項目中引用一些必要的NPOI assembly,如下所示:

NPOI.dll

NPOI.POIFS.dll

NPOI.HSSF.dll

NPOI.Util.dll

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

usingNPOI.HSSF.UserModel;

...

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

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

HSSFSheetsheet = hssfworkbook.CreateSheet("newsheet");

如果要創建標準的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,,在創建完FileStream之后,直接調用HSSFWorkbook類的Write方法就可以了。

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

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

NPOI 1.2教程- 2.1.2創建DocumentSummaryInformation和SummaryInformation

作者:Tony Qu

NPOI官方網站:http://npoi.codeplex.com/

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

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

你會發現只有Workbook目錄,其他什么都沒有,但事實上一個正常的xls文件,比如說Excel生成的xls文件是類似下面的結構:

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

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

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

提示

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

好了,說到這里,我想大家對于接下來我們要創建的內容有了初步的認識,下面我們就馬上動手創建。

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

usingNPOI.HSSF.UserModel;

usingNPOI.HPSF;

usingNPOI.POIFS.FileSystem;

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

首先創建Workbook

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

然后創建DocumentSummaryInformation

DocumentSummaryInformationdsi = PropertySetFactory.CreateDocumentSummaryInformation();

dsi.Company ="NPOI Team";

再創建SummaryInformation

SummaryInformationsi = PropertySetFactory.CreateSummaryInformation();

si.Subject ="NPOI SDK Example";

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

現在我們把創建好的對象賦給Workbook,這樣才能保證這些信息被寫入文件。

hssfworkbook.DocumentSummaryInformation= dsi;

hssfworkbook.SummaryInformation= si;

最后和2.1.1節一樣,我們把Workbook通過FileStream寫入文件。

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

NPOI 1.2教程- 2.1.3創建單元格

作者:Tony Qu

NPOI官方網站:http://npoi.codeplex.com/

用過Excel的人都知道,單元格是Excel最有意義的東西,我們做任何操作恐怕都要和單元格打交道。在Excel中我們要添加一個單元格只需要點擊任何一個單元格,然后輸入內容就是了,但是Excel底層其實沒有這么簡單,不同的單元格是有不同的類型的,比如說數值單元格是用NumberRecord表示,文本單元格是用LabelSSTRecord表示,空單元格是用BlankRecord表示。這也就意味著,在設置單元格時,你必須告訴NPOI你需要創建哪種類型的單元格。

要創建單元格首先要創建單元格所在的行,比如,下面的代碼創建了第0行:

HSSFSheetsheet1 = hssfworkbook.CreateSheet("Sheet1");

HSSFRowrow1=sheet1.CreateRow(0);

行建好了,就可以建單元格了,比如創建A1位置的單元格:

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

這里要說明一下,SetCellValue有好幾種重載,你可以設置單元格為bool、double、DateTime、string和HSSFRichTextString類型。其中對于string類型的重載調用的就是HSSFRichTextString類型的重載,所以是一樣的,HSSFRichTextString可用于有字體或者Unicode的文本。

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

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

這么用有個前提,那就是第0行還沒創建過,否則得這么用:

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

注意:這里的行在Excel里是從1開始的,但是NPOI內部是從0開始的;列在Excel里面是用字母表示的,而NPOI中也是用從0開始的數字表示的,所以要注意轉換。

如果你要獲得某一個已經創建的單元格對象,可以用下面的代碼:

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

本節僅講解最基本的單元格創建,有關單元格格式設置、樣式等高級話題請見:2.2節單元格相關操作。

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

NPOI 1.2教程- 2.1.4創建批注

作者:Tony Qu

NPOI官方網站:http://npoi.codeplex.com/

很多人不怎么用Excel中的批注,所以我特地截了張圖,讓大家知道本節我們要創建的到底是什么東西。

在過去,我們恐怕沒有辦法實現這一功能,因為無論是cvs法、html法、oledb法都沒有提供這樣的接口,當然Office PIA法可以做到,但是性能實在太差,而且穩定性不好,經常莫名其妙crash(這是某某兄弟給我的反饋,我引用了下,呵呵)。在以后的教程中,你將看到更多在過去無法通過傳統方法實現的東西,好戲才剛剛開始。

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

批注的位置和大小,在Excel中是與單元格密切相關的,NPOI中通過HSSFClientAnchor的實例來表示,它的構造函數比較復雜,有8個參數,它們分別是

參數說明

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));

下面我們設置這個批注的內容和作者,這個比較簡單:

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創建頁眉和頁腳

作者:Tony Qu

NPOI官方網站:http://npoi.codeplex.com/

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

當你按“自定義頁眉”或“自定義頁腳”時,你會看到以下界面,Excel把頁眉、頁腳分成了左中右三部分,這一點絕非單純體現在界面上,在底層的存儲中也是如此。如果你設置的是“左”的內容,底層的存儲字符串就會在開頭加上&L,如果是“右”的內容則會加上&R,所以HeaderRecord中的字符串看上去是這樣的:"&C&LFooter A&R”,這個字符串的意思是僅設置了“左”的內容,內容是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內容,Footer的Left和Right內容,在打印預覽中看到的效果大概是這樣的:

頁眉

頁腳

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

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

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

作者:Tony Qu

NPOI官方網站:http://npoi.codeplex.com/

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

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

案例一日期格式

假設我們現在需要顯示的日期的格式為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日”屬于自定義格式(區別于Excel內嵌的格式),所以必須用hssfworkbook.CreateDataFormat()創建一個HSSFDataFormat實例,然后使用format.GetFormat來獲取相應的格式,只要是Excel支持的格式表示方式,這種方式都能夠實現。

案例二保留2位小數

假設我們有個單元格的值為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內嵌的格式,完整的Excel內嵌格式列表大家可以看這個窗口中的自定義列表:

這里就不一一列出了。

案例三貨幣格式

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

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%");

由于這里是內嵌格式,所以直接用HSSFDataFormat.GetBuiltinFormat即可。

案例五中文大寫

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

HSSFDataFormatformat = hssfworkbook.CreateDataFormat();

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

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

案例六科學計數法

這東西數學課上我們都學過,雖然用的不多,但是既然Excel支持,這里也提一下:

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

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

最后總結一下HSSFDataFormat.GetFormat和HSSFDataFormat.GetBuiltinFormat的區別:

當使用Excel內嵌的(或者說預定義)的格式時,直接用HSSFDataFormat.GetBuiltinFormat靜態方法即可。

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

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

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

NPOI 1.2教程- 2.2.2單元格合并

作者:Tony Qu

NPOI官方網站:http://npoi.codeplex.com/

合并單元格在制作表格時很有用,比如說表格的標題就經常是把第一行的單元格合并居中。那么在NPOI中應該如何實現單元格的合并呢?

為了實現這一功能,NPOI引入了新的概念,即Region,因為合并單元格,其實就是設定一個區域。下面說一下Region類的參數,Region總共有4個參數,如下所示

Region的參數說明

FirstRow區域中第一個單元格的行號

FirstColumn區域中第一個單元格的列號

LastRow區域中最后一個單元格的行號

LastColumn區域中最后一個單元格的列號

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

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

HSSFSheetsheet = hssfworkbook.CreateSheet("newsheet");

接下來我們根據實際場景來做一些演示。

場景一標題行的合并

這種場景是最常見的,比如說我們要建立一張銷售情況表,英文叫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;

要產生圖中的效果,即把A1:F1這6個單元格合并,然后添加合并區域:

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

場景二多行合并

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

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

提示即使你沒有用CreateRow和CreateCell創建過行或單元格,也完全可以直接創建區域然后把這一區域合并,Excel的區域合并信息是單獨存儲的,和RowRecord、ColumnInfoRecord不存在直接關系。

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

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

作者:Tony Qu

NPOI官方網站:http://npoi.codeplex.com/

本節將圍繞“對齊”選項卡中的設置展開,雖然實際上你會發現該選項卡中的很多設置和對齊沒有什么關系。合并單元格已經在2.2.2節講過了,這里就不提了。

首先我們用代碼創建必要的單元格,代碼如下:

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

HSSFSheetsheet1 = hssfworkbook.CreateSheet("Sheet1");

HSSFRow row =sheet1.CreateRow(0);

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

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

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

HSSFCellStylestyle=hssfworkbook.CreateCellStyle();

水平對齊

這里用的是HSSFCellStyle.Alignment,默認值自然是常規,即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;

注意:以上選項僅當有足夠的寬度時才能產生效果,不設置寬度恐怕看不出區別。

垂直對齊

這里用的是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

注意:以上選項僅當有足夠的高度時才能產生效果,不設置高度恐怕看不出區別。

自動換行

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

style.WrapText=true;

效果如下所示:

文本縮進

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

style.Indention= 3;

文本旋轉

文本方向大家一定在Excel中設置過,上圖中就是調整界面,主要參數是度數,那么我們如何在NPOI中設置呢?

style.Rotation=(short)90;

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

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

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

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

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

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

作者:Tony Qu

NPOI官方網站:http://npoi.codeplex.com/

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

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

邊框相關屬性說明范例

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

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

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

邊框范例圖對應的靜態值

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,都是靜態實例,可以直接引用。

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

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官方網站:http://npoi.codeplex.com/

本節我們將繼續使用NPOI來設置單元格格式,這一節我們主要講如何設置“字體”。

在設置字體之前,我們首先要做的就是創建字體對象,這和創建數字格式很相似。

HSSFFont font= hssfworkbook.CreateFont();

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

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

HSSFCellStylestyle1 = hssfworkbook.CreateCellStyle();

style1.SetFont(font);

cell1.CellStyle=style1;

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

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

字體名稱

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

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

font.FontName="宋體";

字號

與字號有關的屬性有兩個,一個是FontHeight,一個是FontHeightInPoints。區別在于,FontHeight的值是FontHeightInPoints的20倍,通常我們在Excel界面中看到的字號,比如說12,對應的是FontHeightInPoints的值,而FontHeight要產生12號字體的大小,值應該是240。所以通常建議你用FontHeightInPoint屬性。

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

font.FontHeightInPoints= 12;

字體顏色

這里可能會與CellStyle上的ForegroundColor和BackgroundColor產生混淆,其實所有的字體顏色都是在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官方網站:http://npoi.codeplex.com/

本節我們將用NPOI來為單元格添加背景和圖案。

在之前的教程中,我們已經提到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;

現在是不是清楚一些了,這里的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官方網站:http://npoi.codeplex.com/

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

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

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

HSSFSheetsheet1 = hssfworkbook.CreateSheet("Sheet1");

sheet1.SetColumnWidth(1,100 * 256);

這里你會發現一個有趣的現象,SetColumnWidth的第二個參數要乘以256,這是怎么回事呢?其實,這個參數的單位是1/256個字符寬度,也就是說,這里是把B列的寬度設置為了100個字符。

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

intcol1width = sheet1.GetColumnWidth(1);

說完寬度,我們來說高度,在Excel中,每一行的高度也是要求一致的,所以設置單元格的高度,其實就是設置行的高度,所以相關的屬性也應該在HSSFRow上,它就是HSSFRow.Height和HeightInPoints,這兩個屬性的區別在于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--基本計算

從這節開始,我們將開始學習Excel高級一點的功能--公式。為某個單元格指定公式后,單元格中的類容將根據公式計算得出,如圖:

圖中設置的是一個基本表達式”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寫程序時,行和列的計數都是從0開始計算的,但在設置公式時又是按照Excel的單元格命名規則來的。

2.3.2用NPOI操作EXCEL--SUM函數

這節我們開始學習Excel中最常用的函數—Sum求和函數。

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

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

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函數的參數很容易理解,但如果要求和的單元格很多,那么公式就會很長,既不方便閱讀也不方便書寫。所以Excel提供了另外一種多個單元格求和的寫法:

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

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

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

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

range.Reference?=

"Sheet1!$A1:$C1";

range.NameName?=

"range1";

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

給單元格F1加上公式:

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

生成的Excel如下圖所示:

2.3.3用NPOI操作EXCEL--日期函數

Excel中有非常豐富的日期處理函數,在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;

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

TODAY()

:取得當前日期;

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

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

CONCATENATE(str1,str2,...)

:連接字符串。

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

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

函數名函數說明語法

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

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

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

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

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

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

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

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

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

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

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

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

SECOND返回時間值的秒數。返回的秒數為0至59之間的整數。SECOND(serial_number)

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

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

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

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

WEEKNUM返回一個數字,該數字代表一年中的第幾周。WEEKNUM(serial_num,return_type)

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

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

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

2.3.4用NPOI操作EXCEL--字符串函數

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

UPPER(String)

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

PROPER(String)

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

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

row1.CreateCell(

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

row1.CreateCell(

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

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所提取的字符數。

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

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

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

四、字符串的比較

EXACT(text1,text2)

:比較兩個字符串是否相等,區分大小寫。

執行效果如下:

在此只簡單的講了一下常用的函數,Excel中還有很多的字符串函數,在此附上,讀者可以一個一個去測試。

函數名函數說明語法

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

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

CLEAN刪除文本中不能打印的字符。對從其他應用程序中輸入的字符串使用CLEAN函數,將刪除其中含有的當前操作系統無法打印的字符。例如,可以刪除通常出現在數據文件頭部或尾部、無法打印的低級計算機代碼。CLEAN(text)

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

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

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

EXACT該函數測試兩個字符串是否完全相同。如果它們完全相同,則返回TRUE;否則,返回FALSE。函數EXACT能區分大小寫,但忽略格式上的差異。利用函數EXACT可以測試輸入文檔內的文字。EXACT(text1,text2)

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

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

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

LEFTLEFT基于所指定的字符數返回文本串中的第一個或前幾個字符。

LEFTB

基于所指定的字節數返回文本串中的第一個或前幾個字符。此函數用于雙字節字符。

LEFT(text,num_chars)

LEFTB(text,num_bytes)

LENLEN返回文本串中的字符數。

LENB

返回文本串中用于代表字符的字節數。此函數用于雙字節字符。

LEN(text)

LENB(text)

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

MIDMID返回文本串中從指定位置開始的特定數目的字符,該數目由用戶指定。

MIDB

返回文本串中從指定位置開始的特定數目的字符,該數目由用戶指定。此函數用于雙字節字符。

MID(text,start_num,num_chars)

MIDB(text,start_num,num_bytes)

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

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

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

REPLACEB

使用其他文本串并根據所指定的字符數替換某文本串中的部分文本。此函數專為雙字節字符使用。

REPLACE(old_text,start_num,num_chars,new_text)

REPLACEB(old_text,start_num,num_bytes,new_text)

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

RIGHTRIGHT根據所指定的字符數返回文本串中最后一個或多個字符。

RIGHTB

根據所指定的字符數返回文本串中最后一個或多個字符。此函數用于雙字節字符。

RIGHT(text,num_chars)

RIGHTB(text,num_bytes)

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

SEARCHB

也可在其他文本串(within_text)中查找文本串(find_text),并返回find_text的起始位置編號。此結果是基于每個字符所使用的字節數,并從start_num開始的。此函數用于雙字節字符。此外,也可使用FINDB在其他文本串中查找文本串。

SEARCH(find_text,within_text,start_num)

SEARCHB(find_text,within_text,start_num)

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

T將數值轉換成文本。T(value)

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

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

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

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

WIDECHAR將單字節字符轉換為雙字節字符。WIDECHAR(text)

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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