2015-05-16 20 views
1

Im编辑一个xlsx文件,我试图找出数值单元格中的一些错误,并使粗体。 的数字很大,例如:13882004729568Poi如何改变风格后改变细胞类型

找到他们并改变字体为粗体(或改变前景颜色)的细胞类型更改为默认状态,我也得到后:b1.3882E + 13 甚至尝试后将类型更改为数字。

XSSFFont italic = wb.createFont(); 
italic.setFontName("Arial"); 
italic.setItalic(true); 
CellStyle italicStyle = wb.createCellStyle(); 
italicStyle.setFont(italic); 
cell.setCellStyle(italicStyle); 
cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC); 

我做错了什么? 这是否是另一种方式?的setCellTypelink

回答

1

正式文件:

集合中的小区类型(数字式或字符串)。 如果单元格当前包含值,则该值将转换为与新类型匹配(如果可能)。但是,格式化通常会丢失。

所以,只需切换的陈述,它应该工作:

cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC); 
cell.setCellStyle(italicStyle); 

另一种可能性是,你跑出来的风格,因为你创建一个新的每次。创建一次样式并重用它。

你可以改变细胞类型之前得到的风格,或者你必须设置格式太:

italicStyle.setDataFormat(wb.createDataFormat().getFormat("0")); 

(只显示器的原理,不创建一个新的数据格式每次,再利用。)

+0

尝试过,但仍然是一样的 –

+0

@GurmanEduard那么你可能会使用另一个函数或更高版本再次设置单元格类型?我在代码中看不到问题,Excel可能会有非常烦人的限制(样式数量有限!),但POI本身在我使用它的所有项目中始终可靠。 – maraca

+0

对于每个错误的单元格,我只改变了一次样式,还在不同的位置尝试了cetCellType方法。我找不到任何其他方式来更改单元格类型。 –

1

的帮助 我所做的@maraca THX是:

XSSFDataFormat df = wb.createDataFormat(); 
italicStyle.setDataFormat(df.getFormat("##0")); 

这样的格式变了,差