Poi解析Excel
POI jar下载地址:https://archive.apache.org/dist/poi/release/bin/
SSF是POI工程对Excel 97(-2007)文件操作的纯Java实现
XSSF是POI工程对Excel 2007 OOXML (.xlsx)文件操作的纯Java实现
从POI 3.8版本开始,提供了一种基于XSSF的低内存占用的API----SXSSF
Poi包里有4个主要的类,包括:
Workbook------工作表,通过WorkbookFactory的create(FileInputStream fis)方法获取,
Sheet------------表格,Workbook实例的getSheetAt(int num)方法获取,
Row--------------行,Sheet实例的getRow(int num)方法获取,
Cell--------------单元格,Row实例的getCell(int num)方法获取,
最后通过Cell实例根据数据类型调用对应的方法获取单元格的值。
下面是我做的一个实例。
excel文件内容:包含字符串、日期、数值、公式等数值类型
java代码
public class Poi { private Sheet sheet; //表格类实例 LinkedList[] result; //保存每个单元格的数据 ,使用的是一种链表数组的结构 //读取excel文件,创建表格实例 private void loadExcel(String filePath) { FileInputStream inStream = null; try { inStream = new FileInputStream(new File(filePath)); Workbook workBook = WorkbookFactory.create(inStream); sheet = workBook.getSheetAt(0); } catch (Exception e) { e.printStackTrace(); }finally{ try { if(inStream!=null){ inStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } //获取单元格的值 private String getCellValue(Cell cell) { String cellValue = ""; DataFormatter formatter = new DataFormatter(); if (cell != null) { //判断单元格数据的类型,不同类型调用不同的方法 switch (cell.getCellType()) { //数值类型 case Cell.CELL_TYPE_NUMERIC: //进一步判断 ,单元格格式是日期格式 if (DateUtil.isCellDateFormatted(cell)) { cellValue = formatter.formatCellValue(cell); } else { //数值 double value = cell.getNumericCellValue(); int intValue = (int) value; cellValue = value - intValue == 0 ? String.valueOf(intValue) : String.valueOf(value); } break; case Cell.CELL_TYPE_STRING: cellValue = cell.getStringCellValue(); break; case Cell.CELL_TYPE_BOOLEAN: cellValue = String.valueOf(cell.getBooleanCellValue()); break; //判断单元格是公式格式,需要做一种特殊处理来得到相应的值 case Cell.CELL_TYPE_FORMULA:{ try{ cellValue = String.valueOf(cell.getNumericCellValue()); }catch(IllegalStateException e){ cellValue = String.valueOf(cell.getRichStringCellValue()); } } break; case Cell.CELL_TYPE_BLANK: cellValue = ""; break; case Cell.CELL_TYPE_ERROR: cellValue = ""; break; default: cellValue = cell.toString().trim(); break; } } return cellValue.trim(); } //初始化表格中的每一行,并得到每一个单元格的值 public void init(){ int rowNum = sheet.getLastRowNum() + 1; result = new LinkedList[rowNum]; for(int i=0;i<rowNum;i++){ Row row = sheet.getRow(i); //每有新的一行,创建一个新的LinkedList对象 result[i] = new LinkedList(); for(int j=0;j<row.getLastCellNum();j++){ Cell cell = row.getCell(j); //获取单元格的值 String str = getCellValue(cell); //将得到的值放入链表中 result[i].add(str); } } } //控制台打印保存的表格数据 public void show(){ for(int i=0;i<result.length;i++){ for(int j=0;j<result[i].size();j++){ System.out.print(result[i].get(j) + " "); } System.out.println(); } } public static void main(String[] args) { Poi poi = new Poi(); poi.loadExcel("jxl.xls"); poi.init(); poi.show(); } }