裝載自 http://blog.csdn.net/z69183787/article/details/48133809
解決了我數字前面有0被省略問題
做過很多次導出excel了。都碰到一個問題,內容里如果包含一個比較長的數字,比如訂單號“2546541656596”,excel會自動變成科學計數法。。。
弄過好幾次都沒有解決,最近又要導出excel了,下決心一定要找到解決辦法自己在excel里測試過,較長的數字,都會自動變成科學計數法,除非我們把單元格格式設置成“文本型”
哈哈,似乎找到了思路:用poi先把單元格設置成“文本型”就可以了把。
從文檔里找到了這個方法HSSFCell.setCellType(int type),怎么看這個方法都可以設置單元格格式。
代碼中加入cell.setCellType(HSSFCell.CELL_TYPE_STRING),還是沒有任何變化。。。
又一次陷入無助狀態
從google搜索了半天,找到了這篇文章
http://javacrazyer.iteye.com/blog/894758,博主寫的非常詳細,從原理到解決方法都有了
思路還是那樣,設置單元格格式為“文本型”
下面直接闡述下真正的解決方法:
1 //創建workBook
2 HSSFWorkbook wb = new HSSFWorkbook();
3 //創建一個樣式
4 HSSFCellStyle cellStyle = wb.createCellStyle();
5 //創建一個DataFormat對象
6 HSSFDataFormat format = wb.createDataFormat();
7 //這樣才能真正的控制單元格格式,@就是指文本型,具體格式的定義還是參考上面的原文吧
8 cellStyle.setDataFormat(format.getFormat("@"));
9
10 //具體如何創建cell就省略了,最后設置單元格的格式這樣寫
11 cell.setCellStyle(cellStyle);
當我們把web頁面上的數據導成excel形式時,有時候我們的數據需要以特定的格式呈現出來,這時候我們就需要給cell添加一些樣式規格信息。
首先,我們了解一下excel從web頁面上導出的原理。當我們把這些數據發送到客戶端時,我們想讓客戶端程序(瀏覽器)以excel的格式讀取它,所以把mime類型設為:application/vnd.ms-excel,當excel讀取文件時會以每個cell的格式呈現數據,如果cell沒有規定的格式,則excel會以默認的格式去呈現該cell的數據。這樣就給我們提供了自定義數據格式的空間,當然我們必須使用excel支持的格式。下面就列出常用的一些格式:
1) 文本:vnd.ms-excel.numberformat:@
2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd
3) 數字:vnd.ms-excel.numberformat:#,##0.00
4) 貨幣:vnd.ms-excel.numberformat:¥#,##0.00
5) 百分比:vnd.ms-excel.numberformat: #0.00%
這些格式你也可以自定義,比如年月你可以定義為:yy-mm等等。那么知道了這些格式,怎么去把這些格式添加到cell中呢?很簡單,我們只需要把樣式添加到對應的標簽對(即閉合標簽)即可。如<td></td>,給標簽對<td></td>添加樣式,如下:
view plaincopy to clipboardprint?
<td style="vnd.ms-excel.numberformat:@">410522198402161833</td>
<td style="vnd.ms-excel.numberformat:@">410522198402161833</td>
同樣,我們也可以給<div></div>添加樣式,也可以給<tr></tr>,<table></table>添加樣式,這樣就會引入一個問題,你注意到了嗎?先看如下的代碼:
view plaincopy to clipboardprint?
<table style=’vnd.ms-excel.numberformat:#,##0.00’>
<tr>
<td>542</td>
<td style=’vnd.ms-excel.numberformat: #0.00%’>0.25</td>
</tr>
</table>
<table style=’vnd.ms-excel.numberformat:#,##0.00’>
<tr>
<td>542</td>
<td style=’vnd.ms-excel.numberformat: #0.00%’>0.25</td>
</tr>
</table>
