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



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

     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和其他几个站点,但找不到解决错误的方法。

  1. link1
  2. link2

注意我使用的是Apache POI版本3.14,带有弹簧4.3.1.Release。

尝试为工作簿创建单元格样式,并使用"#,##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()返回结果时,如果它是一个普通数字而没有十进制的IT comer,则有一个小数为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;
    }
}

最新更新