Java 如何在ApachePOI中读取excel文件的精确单元格内容

Java 如何在ApachePOI中读取excel文件的精确单元格内容,java,excel,apache-poi,Java,Excel,Apache Poi,当我读取单元格的内容时,例如,如果它是日期格式,它将转换为另一个值,如12/31/2099->46052和$50.00->50和50.00%->0.5 但我想要的是得到每个单元格的精确字符串值 我的代码如下: cell.setCellType(Cell.CELL_TYPE_STRING); String str = cell.getStringCellValue(); 我不会在阅读时尝试更改数据类型 相反,我会尝试 首先获取单元格类型 然后对每种数据类型使用适当的getter方法 例如:

当我读取单元格的内容时,例如,如果它是日期格式,它将转换为另一个值,如12/31/2099->46052和$50.00->50和50.00%->0.5

但我想要的是得到每个单元格的精确字符串值

我的代码如下:

cell.setCellType(Cell.CELL_TYPE_STRING);
String str = cell.getStringCellValue();

我不会在阅读时尝试更改数据类型

相反,我会尝试

  • 首先获取单元格类型
  • 然后对每种数据类型使用适当的getter方法
例如:

// Let's say you have prepared a DecimalFormat yourNumberFormatter and a
// DateFormat yourDateFormatter with the format that is appropiate to your
// presentation 
Cell cell = ...;
String value = null;
switch (cell.getCellType()) {
   case Cell.TYPE_NUMERIC:
     // Date format
     if ( DateUtil.isCellDateFormatted(cell) ) {
        value = yourDateFormatter.format(cell.getDateCellValue());
     }
     else {
        value = yourNumberFormatter.format(cell.getNumericCellValue());
     }
     break;
   case Cell.TYPE_STRING:
     value = cell.getStringCellValue();
     break;
  // Etc.
}

无需显式格式化,
apachepoi
提供了类作为实用程序,以利用excel上显示的内容格式。您也可以选择自定义格式,一个简单的示例是(单元格引用您的
XSSFCell
对象):

Excel工作表如下所示:

使用
DataFormatter
(上面的sop语句)打印:

正常格式将打印的位置:

0.5
1200.0
21-Dec-2014

我想处理所有单元格类型,如货币、ssn等。我认为DateUtil只用于处理DateType单元格,你是对的。问题是“货币”之类的东西是数字格式和excel单元格的特定样式的组合;您需要微调数字案例条目,以便分离您拥有的每个案例,并生成您的readTx数字的精确表示,这正是我所需要的。不知道单元格内部使用不同的格式类型
50%
$ 1,200
12/21/14
0.5
1200.0
21-Dec-2014