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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 使用Python生成Excel格式的图片
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序