问题描述
java apache poi 包内是否有方法可以获取Excel数值类型单元格中保留的位数?
问题出现的环境背景及自己尝试过哪些方法
有这么一个场景:
需求:从Excel文件中读取数据,原样落库
我的实现思路:使用POI读取每个单元格内容,根据规则落库
但是在使用POI读取数值类型的单元格时出现了问题,有这么一类值,格式是保留n位小数,但是小数位为全0:
这种类型的值我在使用POI读取时,只能读到整数位,无法读取小数位。
我尝试过的获取方法为(仅节选处理数值类型单元格逻辑):
使用NumberFormat格式化:import org.apache.poi.ss.usermodel.*;
private static NumberFormat numberFormat = NumberFormat.getNumberInstance();
public static String getStringValue(Cell cell){
String cellValue;
//是数字类型单元格
if(cell.getCellTypeEnum().equals(CellType.NUMERIC)){
//非日期类型的数字单元格
if(!DateUtil.isCellDateFormatted(cell)){
double doubleValue = cell.getNumericCellValue();
cellValue = numberFormat.format(doubleValue);
}
}
return cellValue;
}
使用DecimalFormat格式化:import org.apache.poi.ss.usermodel.*;
private static DecimalFormat decimalFormat = new DecimalFormat("#.######");
public static String getStringValue(Cell cell){
String cellValue;
//是数字类型单元格
if(cell.getCellTypeEnum().equals(CellType.NUMERIC)){
//非日期类型的数字单元格
if(!DateUtil.isCellDateFormatted(cell)){
double doubleValue = cell.getNumericCellValue();
cellValue = decimalFormat.format(doubleValue);
}
}
return cellValue;
}
直接设置类型为String获取:import org.apache.poi.ss.usermodel.*;
public static String getStringValue(Cell cell){
String cellValue;
//是数字类型单元格
if(cell.getCellTypeEnum().equals(CellType.NUMERIC)){
//非日期类型的数字单元格
if(!DateUtil.isCellDateFormatted(cell)){
cell.setCellType(CellType.STRING);
cellValue = cell.getStringCellValue();
}
}
return cellValue;
}
但是最终的结果都无法读取我想要的保留n位0的数
后来我又尝试了使用EasyExcel,得到的是同样的结果。
你期待的结果是什么?实际看到的错误信息又是什么?
我期待结果为:能够读取出 1000000.00、1000.0000、185.00这三个字符串。
我分析过为什么无法读取出,应该是因为单元格内存储的值就是整数,只是显示出来的时候加上了单元格保留小数的格式。
所以我认为单纯的读数应该解决不了这个问题,需要再获取一个该单元格的保留位数值才行,但是我翻了一下POI的文档,好像都没有看到类似的方法。所以求助各位大佬!
java apache poi 包内是否有方法可以获取Excel数值类型单元格中保留的位数?
或者是否有其他可以达到效果的实现方法?
java poi设置单元格格式为数值 Apache POI 如何读取Excel中数值类型单元格所规定的保留小数位?...