Java ApachePOI:在xls正常工作时从xlsx读取错误的数字/字符串值
我有两张excel表格(一张.xls,一张.xlsx),单元格A1中的内容为“1234567891234.56” 现在,我正试图使用Apache POI将这些内容导入我的java应用程序,如下所示:Java ApachePOI:在xls正常工作时从xlsx读取错误的数字/字符串值,java,excel,apache,apache-poi,Java,Excel,Apache,Apache Poi,我有两张excel表格(一张.xls,一张.xlsx),单元格A1中的内容为“1234567891234.56” 现在,我正试图使用Apache POI将这些内容导入我的java应用程序,如下所示: private String getValue(Cell myCell, int myCelltype) throws CellAccessException { try { switch (myCelltype) { case o
private String getValue(Cell myCell, int myCelltype)
throws CellAccessException {
try {
switch (myCelltype) {
case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING:
return myCell.getStringCellValue();
首先,无论我如何格式化单元格本身,CellType(myCell.getCellType())始终是1(String)
第二,当我从xlsx读取时,我得到了“1234567891234.5601”,而从xls读取时,我得到了“1234567891234.56”,这是我预期的结果
另一个示例是文件中的“12345678912345.6”,以及从xlsx读取结果的“12345678912345.602”
我不知道是什么导致了我的问题,似乎没有其他人有类似的问题
如果你能给我任何帮助,我将不胜感激
提前感谢德国的问候。
奥西里克
编辑:
谢谢你的评论和回答。遗憾的是,格式化返回值没有帮助,因为问题在于从excel工作表中获取正确的值。
在研究不变的细胞类型时,我做了一个奇怪的观察:
在读取xls(!)文件时,我得到了正确的字符串值(在本例中为1.23456789123456E+20)。接下来,将该字符串转换为Double
String content = myCell.getStringCellValue();
System.out.println(result + "#" +result.length());
Double dresult = Double.valueOf(result);
System.out.println(dresult);
输出如下所示:
private String getValue(Cell myCell, int myCelltype)
throws CellAccessException {
try {
switch (myCelltype) {
case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING:
return myCell.getStringCellValue();
1.23456789123456E+20#20
1.2345678912345601E20
所以我开始思考,我从xlsx中的单元格中读取这个错误,这些单元格是数字,但标记为celltype字符串,并将字符串转换为Double。双重保险有什么问题吗?也许我们这里有一些旧的Java版本,Double被破坏了。我不认为这是波伊的错,因为它是3.10决赛,应该运作良好。或者Double在转换这个字符串时做了什么,我只是不明白?我不熟悉Java,也不熟悉这项工作……只是在挣扎。我不确定xls和xlsx中的默认十进制格式是否正在发生变化。然而,这只是一个建议,如果不固定小数点,你应该从你自己的角度固定它,就像
case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING:{
DecimalFormat df = new DecimalFormat("##.##");
return df.format(myCell.getNumericCellValue());
如果单元格类型没有改变,则表示其他地方出了问题。包含数值的单元格应返回其类型为
cell.cell\u type\u numeric
。我将开始调查为什么会发生这种情况。另外,您应该直接使用myCell.getCellType()
,而不是在getValue
方法中传递类型。是否myCellType
永远不会更改?在获取数值时,它们都返回一个double
,因此我怀疑格式是否与他的问题有关。