package framework.util.excel; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; /** * poi 3.6 * * @author liuyajun * @date 2013-10-23 上午09:35:09 */ public final class ExcelReader { /** * 日期类型 */ protected SimpleDateFormat[] dateFmt = new SimpleDateFormat[]{ //new SimpleDateFormat("yyyy-MM"), //new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), //new SimpleDateFormat("HH:mm:ss") }; protected ExcelReader(){ } /** * 打开 *.xls (Excel 2003) * * @param f * @return * @throws Exception */ public static ExcelReader open(File f) throws Exception { ByteArrayOutputStream byteOS = new ByteArrayOutputStream(); FileInputStream fis = new FileInputStream(f); byte[] by = new byte[512]; int t = fis.read(by, 0, by.length); while (t > 0) { byteOS.write(by, 0, 512); // 这里别写成t,写够512,呵呵,SB的方法对付SB的java API t = fis.read(by, 0, by.length); } byteOS.close(); fis.close(); ExcelReader reader = new ExcelReader(); reader.bais = new ByteArrayInputStream(byteOS.toByteArray()); reader.book = new HSSFWorkbook(reader.bais); if (reader.book == null) { fis.close(); } return reader; } protected ByteArrayInputStream bais; protected HSSFWorkbook book; /** * 得到所有 sheet 名称 * * @return */ public String[] getSheets() { int len = book.getNumberOfSheets(); String[] name = new String[len]; for (int i = 0; i < len; i++) { name[i] = book.getSheetName(i); } return name; } /** * 根据 sheetName 得到内容 * @param sheetName * @return 可能为null, 每行的列数可能不同 */ public String[][] getData(String sheetName){ return this.getData(sheetName, Integer.MAX_VALUE, Integer.MAX_VALUE); } /** * 根据 sheetName 得到内容 * * @param sheetName * @param rows 最多行数 * @param cols 最多列数 * @return 可能为null, 每行的列数可能不同 */ public String[][] getData(String sheetName, int rows, int cols) { int sheetId = book.getSheetIndex(sheetName); if(sheetId<0){ return null; } HSSFSheet sheet = book.getSheetAt(sheetId); int rowNum = sheet.getPhysicalNumberOfRows(); //最大已用行数 if(rows