首页 > 代码库 > java poi reader

java poi reader

public class ImportExcel {
    
    private static Logger log = LoggerFactory.getLogger(ImportExcel.class);
            
    /**
     * 工作薄对象
     **/
    private Workbook wb;
    
    /**
     * 工作表对象
     **/
    private Sheet sheet;
    
    /**
     * 标题行号
     */
    private int headerNum;
    
    /**
     * 构造函数
     * @param path 导入文件,读取第1个工作表
     * @param headerNum 标题行号,数据行等于标题行号+1
     * @throws InvalidFormatException 
     * @throws IOException 
     */
    public ImportExcel(String fileName, int headerNum) 
            throws InvalidFormatException, IOException {
        this(new File(fileName), headerNum);
    }
    
    /**
     * 构造函数
     * @param path 导入文件对象,读取第1个工作表
     * @param headerNum 标题行号,数据行等于标题行号+1
     * @throws InvalidFormatException 
     * @throws IOException 
     */
    public ImportExcel(File file, int headerNum) 
            throws InvalidFormatException, IOException {
        this(file, headerNum, 0);
    }

    /**
     * 构造函数
     * @param path 导入文件
     * @param headerNum 标题行号,数据行等于标题行号+1
     * @param sheetIndex 工作表编号,以0开始
     * @throws InvalidFormatException 
     * @throws IOException 
     */
    public ImportExcel(String fileName, int headerNum, int sheetIndex) 
            throws InvalidFormatException, IOException {
        this(new File(fileName), headerNum, sheetIndex);
    }
    
    /**
     * 构造函数
     * @param path 导入文件对象
     * @param headerNum 标题行号,数据行等于标题行号+1
     * @param sheetIndex 工作表编号,以0开始、
     * @throws InvalidFormatException 
     * @throws IOException 
     */
    public ImportExcel(File file, int headerNum, int sheetIndex) 
            throws InvalidFormatException, IOException {
        this(file.getName(), new FileInputStream(file), headerNum, sheetIndex);
    }
    
    /**
     * 构造函数
     * @param file 导入文件对象
     * @param headerNum 标题行号,数据行等于标题行号+1
     * @param sheetIndex 工作表编号,以0开始、 
     * @throws InvalidFormatException 
     * @throws IOException 
     */


    /**
     * 构造函数
     * @param path 导入文件对象
     * @param headerNum 标题行号,数据行等于标题行号+1
     * @param sheetIndex 工作表编号,以0开始、
     * @throws InvalidFormatException 
     * @throws IOException 
     */
    public ImportExcel(String fileName, InputStream is, int headerNum, int sheetIndex) 
            throws InvalidFormatException, IOException {
        if (StringUtils.isBlank(fileName)){
            throw new RuntimeException("导入文档为空!");
        }else if(fileName.toLowerCase().endsWith("xls")){    
            this.wb = new HSSFWorkbook(is);    
        }else if(fileName.toLowerCase().endsWith("xlsx")){  
            this.wb = new XSSFWorkbook(is);
        }else{  
            throw new RuntimeException("文档格式不正确?");
        }  
        if (this.wb.getNumberOfSheets()<sheetIndex){
            throw new RuntimeException("文档中没有工作表!");
        }
        this.sheet = this.wb.getSheetAt(sheetIndex);
        this.headerNum = headerNum;
        log.debug("Initialize success.");
    }
    
    /**
     * 获取行对象
     * @param rownum
     * @return
     */
    public Row getRow(int rownum){
        return this.sheet.getRow(rownum);
    }

    /**
     * 获取数据行号
     * @return
     */
    public int getDataRowNum(){
        return headerNum+1;
    }
    
    /**
     * 获取工作表中的最后一行的行号,以0开始
     * @return
     */
    public int getLastDataRowNum(){
        return this.sheet.getLastRowNum();
    }
    
    /**
     * 获取一行记录总的列数
     * @return
     */
    public int getLastCellNum(){
        return this.getRow(headerNum).getLastCellNum();
    }
    
    /**
     * 获取单元格的值
     * @param row 获取的行
     * @param column 获取单元格列号
     * @return 单元格的值
     */
    public Object getCellValue(Row row, int column){
        Object val = "";
        try{
            Cell cell = row.getCell(column);
            if (cell != null){
                if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
                    val = cell.getNumericCellValue();
                }else if (cell.getCellType() == Cell.CELL_TYPE_STRING){
                    val = cell.getStringCellValue();
                }else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA){
                    val = cell.getCellFormula();
                }else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN){
                    val = cell.getBooleanCellValue();
                }else if (cell.getCellType() == Cell.CELL_TYPE_ERROR){
                    val = cell.getErrorCellValue();
                }
            }
        }catch (Exception e) {
            return val;
        }
        return val;
    }
    /**
     * 导入测试
     */
    public static void main(String[] args) throws Throwable {
        ImportExcel ei = new ImportExcel("import.xls", 0);
        System.out.println(ei.getLastDataRowNum());
        System.out.println(ei.getDataRowNum());
        
        for (int i = ei.getDataRowNum(); i <= ei.getLastDataRowNum(); i++) {
            Row row = ei.getRow(i);
            System.out.println("Row num:"+i);
            for (int j = 0; j < ei.getLastCellNum(); j++) {
                Object val = ei.getCellValue(row, j);
                System.out.print(val+", ");
            }
            System.out.print("\n");
        }
        
    }

}