您的位置:首页 > 编程语言 > Java开发

POI获取Excel单元格的值,以及处理单元格中是公式的情况

2016-06-14 18:24 661 查看
在使用POI处理Excel表格时,遇到单元格中是公式的情况,如果想取出单元格中已经计算好的值,而不是公式,就需要稍微处理一下。

public class PoiTest {

public static void main(String[] args) {
String path = "";
File file = new File(path);

InputStream in = null;
Workbook workbook = null;
FormulaEvaluator formulaEvaluator = null;
try {
in = new FileInputStream(file);

if (file.getName().endsWith("xlsx")) {
workbook = new XSSFWorkbook(in);
formulaEvaluator = new XSSFFormulaEvaluator((XSSFWorkbook) workbook);
} else {
workbook = new HSSFWorkbook(in);
formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) workbook);
}

Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
//结果比较
System.out.println(getCellValue(cell) + "**" + getCellValueFormula(cell, formulaEvaluator));
}
}

} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}

//未处理公式
public static String getCellValue(Cell cell) {
if (cell == null) {
return null;
}

switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
return cell.getRichStringCellValue().getString().trim();
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//非线程安全
return sdf.format(cell.getDateCellValue());
} else {
return String.valueOf(cell.getNumericCellValue());
}
case Cell.CELL_TYPE_BOOLEAN:
return String.valueOf(cell.getBooleanCellValue());
case Cell.CELL_TYPE_FORMULA:
return cell.getCellFormula();
default:
return null;
}
}

//处理公式
public static String getCellValueFormula(Cell cell, FormulaEvaluator formulaEvaluator) {
if (cell == null || formulaEvaluator == null) {
return null;
}

if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
return String.valueOf(formulaEvaluator.evaluate(cell).getNumberValue());
}
return getCellValue(cell);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java poi excel 单元格 取值