Java 使用Apache POI写入数据时删除excel单元格中小数点的单元格格式
我使用ApachePOI将一个Excel函数写入一个单元格,并对该函数进行求值。我需要做的是删除单元格中的所有小数点。目前,每个单元格值的末尾都会出现不必要的两个零。单元格格式如下所示。但它总是在最后得到两个零Java 使用Apache POI写入数据时删除excel单元格中小数点的单元格格式,java,excel,spring,apache-poi,Java,Excel,Spring,Apache Poi,我使用ApachePOI将一个Excel函数写入一个单元格,并对该函数进行求值。我需要做的是删除单元格中的所有小数点。目前,每个单元格值的末尾都会出现不必要的两个零。单元格格式如下所示。但它总是在最后得到两个零 XSSFCellStyle cellStyle = cell.getCellStyle(); DataFormat df = workbook.createDataFormat(); cellStyle.setDataFormat(df.getFormat(
XSSFCellStyle cellStyle = cell.getCellStyle();
DataFormat df = workbook.createDataFormat();
cellStyle.setDataFormat(df.getFormat("###,##0"));
cell.setCellStyle(cellStyle);
if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
evaluator.evaluateFormulaCell(cell);
}
我参考了以下URL和其他几个站点,但找不到修复错误的方法
注意
我在Spring 4.3.1.RELEASE中使用Apache POI 3.14版。尝试为工作簿创建单元格样式,并将此样式与
“#,##0”
数字格式应用于列中的所有单元格:
CellStyle style = workbook.createCellStyle();
DataFormat format = workbook.createDataFormat();
style.setDataFormat(format.getFormat("#,##0"));
cell.setCellStyle(style);
从工作簿创建样式是最佳方式,并且不会使内存过载
您还可以调整公式,将数字四舍五入到小数点后0位:
=ROUND(A1,0)
尝试为工作簿创建单元格样式,并使用
“#,##0”
数字格式为列中的所有单元格应用此样式:
CellStyle style = workbook.createCellStyle();
DataFormat format = workbook.createDataFormat();
style.setDataFormat(format.getFormat("#,##0"));
cell.setCellStyle(style);
从工作簿创建样式是最佳方式,并且不会使内存过载
您还可以调整公式,将数字四舍五入到小数点后0位:
=ROUND(A1,0)
所以基本上,如果您在java中使用POI库,数字列单元格总是返回双精度格式,因为POI只支持双精度数字格式,我提到了链接 如果您希望获得列中所示的原始值,那么要克服这个问题,下面是一个简单的解决方案 当
cell.getNumericCellValue()
返回一个结果时,如果它是一个没有小数点的正常数字,则返回一个小数点0。例如,如果它显示在工作表410中,则返回410.0
因此,当您尝试从单元格中获取值时,需要添加以下代码以获得准确的结果
例如String cellValue=format(cell.getNumericCellValue()+)代码>
public static String format(String val){
String stringVal = String.valueOf(val);
String[] number = stringVal.split( "[.]" );
if(number.length>1 && number[1].equalsIgnoreCase("0")){
return number[0];
} else {
return val;
}
}
所以基本上,如果您在java中使用POI库,数字列单元格总是返回双精度格式,因为POI只支持双精度数字格式,我提到了链接
如果您希望获得列中所示的原始值,那么要克服这个问题,下面是一个简单的解决方案
当cell.getNumericCellValue()
返回一个结果时,如果它是一个没有小数点的正常数字,则返回一个小数点0。例如,如果它显示在工作表410中,则返回410.0
因此,当您尝试从单元格中获取值时,需要添加以下代码以获得准确的结果
例如String cellValue=format(cell.getNumericCellValue()+)代码>
public static String format(String val){
String stringVal = String.valueOf(val);
String[] number = stringVal.split( "[.]" );
if(number.length>1 && number[1].equalsIgnoreCase("0")){
return number[0];
} else {
return val;
}
}
单元格样式是工作簿范围,Excel的最大值非常低。如果你一开始只创建一次样式并重新使用它会发生什么?@Gagravarr,谢谢你的想法。但是我只发布了所需的代码。我对列中的每个单元格都使用这种样式。不管怎样,你有什么办法解决我的问题吗?单元格样式是工作簿范围,Excel的最大值很低。如果你一开始只创建一次样式并重新使用它会发生什么?@Gagravarr,谢谢你的想法。但是我只发布了所需的代码。我对列中的每个单元格都使用这种样式。不管怎样,你有什么办法解决我的问题吗?这样我以前的手机风格就消失了。所以我所做的就是得到前面的cellstyle,如下所示,XSSFCellStyle-cellstyle=cell.getCellStyle()然后按如下方式合并它们,style.cloneStyleFrom(cellStyle)这样一来,我以前的手机风格就消失了。所以我所做的就是得到前面的cellstyle,如下所示,XSSFCellStyle-cellstyle=cell.getCellStyle()然后按如下方式合并它们,style.cloneStyleFrom(cellStyle)代码>