JAVA Excel工具类-简洁读取
package com.jingsky.mv.util; import com.jingsky.util.common.CollectionUtil; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.DateUtil; import java.io.*; import java.text.DecimalFormat; import java.util.LinkedList; import java.util.List; /** * 封装对excel的操作,包括本地读写excel和流中输出excel,支持office 2007。 * 依赖于poi-3.9-20121203.jar,poi-ooxml-3.9-20121203.jar,poi-ooxml-schemas-3.9-20121203.jar,dom4j-1.6.1.jar * 有参构造函数参数为excel的全路径 * @author 老沙 QQ:862990787 */ public class ExcelUtil { // excel文件流 private InputStream inputStream; /** * 无参构造函数 默认 */ public ExcelUtil() { } /** * 有参构造函数 */ public ExcelUtil(InputStream inputStream) { this.inputStream= inputStream;; } /** * 读取某个工作簿上的所有单元格的值。 * 作者:朱志杰 * July 30, 2013 3:27:08 PM * @param sheetOrder 工作簿序号,从0开始。 * @return List<Object[]> 所有单元格的值。 * @throws IOException 加载excel文件IO异常。 * @throws FileNotFoundException excel文件没有找到异常。 * @throws InvalidFormatException */ public List<Object[]> read(int sheetOrder) throws FileNotFoundException, IOException, InvalidFormatException{ Workbook workbook = WorkbookFactory.create(this.inputStream); if(this.inputStream != null) { this.inputStream.close(); } Sheet sheet = workbook.getSheetAt(sheetOrder); //用来记录excel值 List<Object[]> valueList=new LinkedList<Object[]>(); //循环遍历每一行、每一列。 for(Row row : sheet){ //每一行 Object[] rowObject=null; //System.out.println(row.getLastCellNum()); for(int i=0 ;i<row.getLastCellNum();i++){ Cell cell=row.getCell(i); //System.out.println(cell==null); if(cell==null){ rowObject= CollectionUtil.addToArray(rowObject, ""); continue; } //cell.getCellType是获得cell里面保存的值的type switch(cell.getCellType()){ case Cell.CELL_TYPE_BOOLEAN: //得到Boolean对象的方法 rowObject=CollectionUtil.addToArray(rowObject, cell.getBooleanCellValue()); break; case Cell.CELL_TYPE_NUMERIC: //先看是否是日期格式 if(DateUtil.isCellDateFormatted(cell)){ //读取日期格式 rowObject=CollectionUtil.addToArray(rowObject, new com.jingsky.util.common.DateUtil(cell.getDateCellValue()).toLongDate()); }else{ DecimalFormat df = new DecimalFormat(); //单元格的值,替换掉, String value=df.format(cell.getNumericCellValue()).replace(",",""); //读取数字 rowObject=CollectionUtil.addToArray(rowObject, value); } break; case Cell.CELL_TYPE_FORMULA: //读取公式 rowObject=CollectionUtil.addToArray(rowObject, cell.getCellFormula()); break; case Cell.CELL_TYPE_STRING: //读取String rowObject=CollectionUtil.addToArray(rowObject, cell.getRichStringCellValue().toString()); break; default: //读取String rowObject=CollectionUtil.addToArray(rowObject, cell.getRichStringCellValue().toString()); } } //将这行添加到list。 valueList.add(rowObject); } return valueList; } /** * 读取某个工作簿上的某个单元格的值。 * 作者:朱志杰 * Sep 19, 2012 3:27:08 PM * @param sheetOrder 工作簿序号,从0开始。 * @param colum 列数 从1开始 * @param row 行数 从1开始 * @return 单元格的值。 * @throws Exception 加载excel异常。 */ public String read(int sheetOrder,int colum, int row) throws Exception { Workbook workbook = WorkbookFactory.create(this.inputStream); if(this.inputStream != null) { this.inputStream.close(); } Sheet sheet = workbook.getSheetAt(sheetOrder); Row rows = sheet.getRow(row-1); Cell cell = rows.getCell(colum-1); String content = cell.getStringCellValue(); return content; } }