2016-03-15 47 views
3

我正在使用Apache-POI 3.14。我需要將單元格鎖定爲「文本」格式。我的單元格中的數據可能是全部數字,但仍然被視爲一個字符串。當我寫的細胞,我不喜歡這樣寫道:如何設置單元格格式爲文本

cell.setCellValue("001"); 
cell.setCellType(Cell.CELL_TYPE_STRING); 

當我在Excel中打開輸出工作簿中,細胞包含正確的值(「001」),並將其顯示在角落綠色的小三角形。懸停在感嘆號上會顯示懸停文本The number in this cell is formatted as text or preceded by an apostrophe。當我查看單元格格式(右鍵單擊 - >格式單元格)時,「類別」顯示爲「常規」。我預計這是「文字」。

當用戶通過輸入數字修改單元格中的值時,就會出現問題。由於「類別」是「常規」,因此輸入值並將其顯示爲數字,刪除前導零並右對齊。

我怎樣才能達到與Excel的「格式單元格」對話框相同的結果?

+0

你使用什麼格式 - XSSF(.xlsx)或HSSF(.xls)? – Gagravarr

+0

我正在使用HSSF。 –

回答

3

你可以嘗試設置單元格格式通過文本

DataFormat fmt = wb.createDataFormat(); 
CellStyle cellStyle = wb.createCellStyle(); 
cellStyle.setDataFormat(
    fmt.getFormat("@")); 
cell.setCellStyle(cellStyle); 

注:CellStyles shoudl被重新用於所有適用的細胞,不會產生每個細胞都有新的。

您也可以嘗試使用.xlsx格式的「忽略錯誤」功能,但是對它的支持尚未完成,請參閱Issue 46136Issue 58641以瞭解一些正在進行的討論。

this MSDN page見一些額外的信息

+1

這樣做的竅門 - 儘管我使用格式「」@「作爲文本。我相信#「'會使數字類型。 –

+1

[46136](https://bz.apache。org/bugzilla/show_bug.cgi?id = 46136)可能是HSSF中最好的一個,或者XSSF/SS的[56892](https://bz.apache.org/bugzilla/show_bug.cgi?id=56892) – Gagravarr

+0

對不起,我對「@」不確定,但顯然太懶了,不能交叉檢查:( – centic

0

我沒有辦法測試這個,但你有沒有嘗試過使用模板 - 一個空的excel文件,所有的單元格格式化爲文本?

0

看起來OP是在尋求Apache解決方案。經過一番搜索,我發現這個答案:

HSSFCellStyle style = book.createCellStyle(); 
style.setDataFormat(BuiltInFormats.getBuiltInFormat("text")); 
+0

這應該是什麼語言/圖書館?只有它看起來不像Apache POI + Java,這是OP想要的解決方案... – Gagravarr

+0

只需注意。感謝您伸出援助之手。 –

3

對於HSSF,

DataFormat fmt = workbook.createDataFormat(); 
    CellStyle textStyle = workbook.createCellStyle(); 
    textStyle.setDataFormat(fmt.getFormat("@")); 
    sheet.setDefaultColumnStyle(0, textStyle); 

它只是規定了整個欄目風格爲文本,並設置類別爲文本。但是,如果您使用的是XSSF格式,它不起作用(我正在使用Apache Poi 3.15並且不適用於我)。 在這種情況下,你已經設置的風格,你想用的,除了上面代碼文本對待每個單元:

cell.setCellStyle(textStyle); 

至於錯誤,你可以使用

sheet.addIgnoredErrors(new CellRangeAddress(0,9999,0,9999),IgnoredErrorType.NUMBER_STORED_AS_TEXT); 

它忽略了NUMBER_STORED_AS_TEXT錯誤0行至9999行,0行至9999行,你不會看到它。

相關問題