如何在Apache POI中获取单元格数字的格式化值?

4
我想要将数字单元格的值作为简单字符串获取。
假设单元格类型为数字,其值为90%。现在我不能使用cell.getStringCellValue(),因为它会抛出异常。我也不能使用cell.getNumericCellValue(),因为它会返回.9而不是90%。
我想要将其存储在类型为varchar2的db中,所以我只需要字符串的值。
我不能更改xls中的单元格类型,因为这是最终用户的工作,我必须在代码中处理此问题。
同时,格式化程序无法很好地工作,因为xls中可能有不同的单元格类型...dd:mm、dd:mm:ss、formula等。
我所需要的就是无论单元格类型如何,都要将其值作为简单字符串获取。
3个回答

4
您可以使用以下方法强制将值作为字符串返回
HSSFDataFormatter hdf = new HSSFDataFormatter();
System.out.println (hdf.formatCellValue(mycell));

将返回“90%”

此方法的API位于http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/DataFormatter.html#formatCellValue%28org.apache.poi.ss.usermodel.Cell%29

即使是HSSFCell,此方法也可以直接使用

当我的单元格为HSSFCell时,此方法对我有效

我还尝试了这种转换-它也有效。

HSSFCell cell1 = (HSSFCell) row1.getCell(2);

HSSFDataFormatter hdf = new HSSFDataFormatter();
System.out.println ("formatted "+ hdf.formatCellValue(cell1));

HSSFDataFormatter hdf = new HSSFDataFormatter(); System.out.println(hdf.formatCellValue(mycell)); 在我的情况下,“myCell”参数的类型是HSSFCell,但hdf.formatCellValue(mycell)将“mycell”作为单元格类型。我尝试将其强制转换为单元格,但它会抛出异常:java.lang.ClassCastException.....实际上,我的代码是使用HSSF API编写的... - Dhananjay
我尝试使用HSSF单元格...它可以工作,但是当我将其作为独立的Java类在Java 1.6上运行时...我的应用程序在Portal 6.1上,我必须使用Java 1.5...它会抛出异常。 - Dhananjay
我可以在独立的Java类中运行1.5版本,但是在拥有1.5版本的门户服务器6.1上无法运行...需要使用3.6版本的jar文件。 - Dhananjay
不起作用。"1578390016427" 返回类似于: "1.57839E+12"。 - Pranjal Choladhara
@PranjalCholadhara:您的问题已在https://dev59.com/1VYO5IYBdhLWcg3wDNbI得到解决。 - JoseK
显示剩余3条评论

1

cell.getRichStringCellValue().getString(); 这个没起作用...错误:-lang.NoSuchMethodError。我正在使用poi 3.6 jar。 - Dhananjay
@user371238 你有检查过示例代码吗?试试旧版本的jar包。文档中显示了该方法,它是存在的。 - jmj

0
以下代码使用当前的2021年版apache poi版本。现在DataFormatter可以用于XSSF(Office Open XML *.xlsx)以及HSSF(BIFF *.xls)格式。它应该与FormulaEvaluator一起使用,以获取公式单元格中的值。
import org.apache.poi.ss.usermodel.*;

import java.io.FileInputStream;

class ReadExcel {

 public static void main(String[] args) throws Exception {

  Workbook workbook = WorkbookFactory.create(new FileInputStream("Excel.xlsx"));
  //Workbook workbook = WorkbookFactory.create(new FileInputStream("Excel.xls"));

  DataFormatter dataFormatter = new DataFormatter(java.util.Locale.US);
  FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();

  String cellValue = "";

  for (Sheet sheet: workbook) {
   System.out.println(sheet.getSheetName());
   for (Row row : sheet) {
    for (Cell cell : row) {

     cellValue = dataFormatter.formatCellValue(cell, formulaEvaluator);
     System.out.println(cell.getAddress() + ":" + cellValue);
     // do something with cellValue

    }
   }
  }
  workbook.close();
 }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接