使用Apache POI进行数据写入时,单元格格式化以删除Excel单元格中的小数点

时间:2017-04-23 19:31:31

标签: java excel spring apache-poi

我使用Apache POI将Excel函数写入单元格并评估函数。我需要做的是从单元格中删除所有小数点。目前它在每个单元格的末尾得到不必要的两个零。单元格格式如下。但它最终总是得到两个零。

CommonJS

我提到了以下网址和其他几个网站,但无法找到修复错误的方法。

  1. link1
  2. link2
  3. 注意 我使用Apache POI版本3.14和Spring 4.3.1.RELEASE。

2 个答案:

答案 0 :(得分:1)

尝试为工作簿创建单元格样式,并为列中的所有单元格应用"#,##0"数字格式的此样式:

CellStyle style = workbook.createCellStyle();
DataFormat format = workbook.createDataFormat();
style.setDataFormat(format.getFormat("#,##0"));
cell.setCellStyle(style);

从工作簿创建样式是最佳方式,不会使内存过载。

您还可以调整公式,将数字四舍五入:

=ROUND(A1,0)

答案 1 :(得分:0)

因此,基本上,如果您在Java中使用POI库,则会发生Number列单元格始终返回双精度格式的情况,因为poi仅支持双精度数字格式,我提到了链接here

要解决此问题,如果您希望获得本栏中显示的原始值,这是简单的解决方案。

如果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;
    }
}