Java xssf如何获取字符串形式的任何内容
我尝试使用ApachePOIXSSF将excel文件解析为XML。 现在有一个细胞,不知道里面是什么,我只想从中得到一个字符串。 但是当我使用Java xssf如何获取字符串形式的任何内容,java,excel,apache-poi,xssf,Java,Excel,Apache Poi,Xssf,我尝试使用ApachePOIXSSF将excel文件解析为XML。 现在有一个细胞,不知道里面是什么,我只想从中得到一个字符串。 但是当我使用 cell.getStringCellValue() 它抛出了一个异常,这并不奇怪,因为它是以这种方式记录的。 所以我通过检查它是数字还是文本单元格来构建我的方法。但是如何处理公式单元格呢。它们可能包含以下数字: = A2 + B2 是什么给了我总数(如4)或其他文本的参考 = C2 可能指的是像“Hans”这样的文本 我如何知道我的单元格中到底有什
cell.getStringCellValue()
它抛出了一个异常,这并不奇怪,因为它是以这种方式记录的。
所以我通过检查它是数字还是文本单元格来构建我的方法。但是如何处理公式单元格呢。它们可能包含以下数字:
= A2 + B2
是什么给了我总数(如4)或其他文本的参考
= C2
可能指的是像“Hans”这样的文本
我如何知道我的单元格中到底有什么,以及如何从中提取字符串?您可以按如下方式添加单元格类型检查:
switch(cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t\t");
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t\t");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "\t\t");
break;
}
试试这个
case Cell.CELL_TYPE_FORMULA:
switch (cell.getCachedFormulaResultType()) {
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getRichStringCellValue().getString());
break;
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
System.out.println(cell.getDateCellValue() + "");
} else {
System.out.println(cell.getNumericCellValue());
}
break;
}
break;
Excel将某些单元格存储为字符串,但大多数单元格存储为数字,并应用了特殊的格式规则。如果要获取原始值,请使用基于
cell.getCellType()
的switch语句,如其他一些答案所示
但是,如果您想要的是一个单元格字符串,根据对单元格+单元格类型应用的所有格式规则,它显示的内容与Excel显示的内容相同,那么Apache POI有一个类来实现这一点-
您需要做的就是:
Workbook wb = WorkbookFactory.create(new File("myfile.xls"));
DataFormatter df = new DataFormatter();
Sheet s = wb.getSheetAt(0);
Row r1 = s.getRow(0);
Cell cA1 = r1.getCell(0);
String asItLooksInExcel = df.formatCellValue(cA1);
不管单元格类型是什么,DataFormatter都将使用Excel中应用的规则,尽可能为您格式化单元格,并在最后返回一个格式良好的字符串。Accepted答案不适用于公式单元格(在结果字符串中,您得到的是公式,而不是公式的结果)。 以下是在每种情况下对我有效的方法:
final XSSFWorkbook workbook = new XSSFWorkbook(file);
final DataFormatter dataFormatter = new DataFormatter();
final FormulaEvaluator objFormulaEvaluator = new XSSFFormulaEvaluator(workbook);
final Cell cell = ...;
objFormulaEvaluator.evaluate(cell);
final String cellValue = dataFormatter.formatCellValue(cell, objFormulaEvaluator);
我已经做到了。但是当单元格类型为CELL\u type\u公式时,该怎么办?我如何知道我必须使用哪种getter?它对参考单元格有效吗?与第一个单元格类似,第一个单元格引用了另一张图纸。。