1. 程式人生 > >NPOI 1.2.4教程 – 2.2.1 設定單元格格式

NPOI 1.2.4教程 – 2.2.1 設定單元格格式

轉載網址:

http://tonyqus.sinaapp.com/archives/108

==============================================================================================================================

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

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

案例一 日期格式

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

1 2 3 4 5 6 7 8 ISheet sheet = hssfworkbook.CreateSheet("new sheet"); ICell cell = sheet.CreateRow(0).CreateCell(0); cell.SetCellValue(newDateTime(2008,5,5)); //set date format ICellStyle cellStyle = hssfworkbook.CreateCellStyle();
IDataFormat format = 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”來表示,所以下面的程式碼就能完成:

1 2 3 4 5 6 7 8 // Create a row and put some cells in it. Rows are 0 based. ICell cell = sheet.CreateRow(0).CreateCell(0); //set value for the cell cell.SetCellValue(1.2); //number format with 2 digits after the decimal point - "1.20" ICellStyle cellStyle = hssfworkbook.CreateCellStyle(); cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00"); cell.CellStyle = cellStyle;

這裡與上面有所不同,用的是HSSFDataFormat.GetBuiltinFormat()方法,之所以用這個,是因為0.00是Excel內嵌的格式,完整的Excel內嵌格式列表大家可以看這個視窗中的自定義列表:

image_thumb4

這裡就不一一列出了。

案例三 貨幣格式

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

1 2 3 4 5 6 ICell cell2 = sheet.CreateRow(1).CreateCell(0); cell2.SetCellValue(20000); ICellStyle cellStyle2 = hssfworkbook.CreateCellStyle(); IDataFormat format = hssfworkbook.CreateDataFormat(); cellStyle2.DataFormat = format.GetFormat("¥#,##0"); cell2.CellStyle = cellStyle2;

注意,這裡還加入了千分位分隔符,所以是#,##,至於為什麼這麼寫,你得去問微軟,呵呵。

案例四 百分比

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

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

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

案例五 中文大寫

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

1 2 IDataFormat format = hssfworkbook.CreateDataFormat(); cellStyle6.DataFormat = format.GetFormat("[DbNum2][$-804]0");

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

案例六 科學計數法

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

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

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

image_thumb5

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

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

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

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