表格读取工具类[处理2003/2007]

package com.excel;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.OfficeXmlFileException;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;

public class ReadExcel {

    private static final int startReadRowIndex=0;      // 0从标题开始读取  1从数据开始读取
    private static final int startReadSheetIndex=0;    // 默认从第 0 个工作表开始读取
    private static final boolean  isReadSheets=true;  //是否读取多个工作表 是:从 startReadSheetIndex 开始读取  否:读取 startReadSheetIndex工作表
    private static String IS_EMPTY="IS_EMPTY";         //为空标识

    private static String path2003="E:\\data\\Test2003.xls"; //2007
    private static String path2007="E:\\data\\Test2007.xlsx"; //2007

    public static void main(String[] args) {
        System.out.println("***读取表格***");
        ReadExcel readExcel =new ReadExcel();
        Map<Integer,List<String[]>> map= readExcel.readExcel2003(path2003);
       /*for(Integer n : map.keySet()){
            List<String[]> list=map.get(n);
            for(String[] strings : list){
                System.out.println(Arrays.asList(strings));
            }
        }*/
    }



    /**
     * 采用2003版本读取数据
     * @param path
     * @return
     */
    public Map<Integer,List<String[]>>  readExcel2003(String path){
        Map<Integer,List<String[]>> data=new HashMap<Integer, List<String[]>>();
        try {
            HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(path));
            data=getExcelData2003(workbook);
        } catch (IOException e) {
            e.printStackTrace();
        }catch (OfficeXmlFileException e){
            data=readExcel2007(path);
        }finally {
            return data;
        }
    }

    /**
     * 2003 读取数据
     * @param workbook
     */
    public Map<Integer,List<String[]>> getExcelData2003(HSSFWorkbook workbook){
        int sheetCounts =workbook.getNumberOfSheets();
        Map<Integer,List<String[]>> data=new HashMap();
        int sheetIndex=startReadSheetIndex;
        while(sheetIndex<sheetCounts){
            HSSFSheet sheet=workbook.getSheetAt(sheetIndex);
            int rowNum=sheet.getLastRowNum();
            int cellNum=sheet.getRow(0).getLastCellNum();
            List<String[]> sheetData=new ArrayList<String[]>();
            for(int i=startReadRowIndex;i<=rowNum;i++){
                HSSFRow row=sheet.getRow(i);
                if(row==null){
                    continue;
                }
                String[] rowData=new String[cellNum];
                for(int j=0;j<cellNum;j++){
                    if(row.getCell(j)==null||row.getCell(j).toString().length()==0||row.getCell(j).toString().isEmpty()){
                        rowData[j]=IS_EMPTY;
                    }else{
                        rowData[j]=row.getCell(j).toString();
                    }
                }
                sheetData.add(rowData);
            }
            data.put(sheetIndex,sheetData);
            if(!isReadSheets){
                sheetIndex=sheetCounts;
            }
            System.out.println("[2003版本] 工作表: ["+sheet.getSheetName()+"] 读取完成");
            sheetIndex++;
        }
        return data;
    }

    /**
     * 采用2007版本读取数据
     * @param path
     * @return
     */
    public  Map<Integer,List<String[]>>  readExcel2007(String path){
        Map<Integer,List<String[]>> data=new HashMap<Integer, List<String[]>>();
        try {
            XSSFWorkbook workbook=new XSSFWorkbook(new FileInputStream(path));
            data=getExcelData2007(workbook);
        } catch (IOException e) {
            e.printStackTrace();
        }catch (OfficeXmlFileException e){
            data=readExcel2003(path);
        }finally {
            return data;
        }
    }

    /**
     * 2007 读取数据
     * @param workbook
     */
    public  Map<Integer,List<String[]>>  getExcelData2007(XSSFWorkbook workbook){
        int sheetCounts =workbook.getNumberOfSheets();
        Map<Integer,List<String[]>> data=new HashMap();
        int sheetIndex=startReadSheetIndex;
        while(sheetIndex<sheetCounts){
            XSSFSheet sheet=workbook.getSheetAt(sheetIndex);
            int rowNum=sheet.getLastRowNum();
            int cellNum=0;
            List<String[]> sheetData=new ArrayList<String[]>();
            for(int i=startReadRowIndex;i<=rowNum;i++){
                cellNum=sheet.getRow(0).getLastCellNum();
                XSSFRow row=sheet.getRow(i);
                if(row==null){
                    continue;
                }
                String[] rowData=new String[cellNum];
                for(int j=0;j<cellNum;j++){
                    if(row.getCell(j)==null||row.getCell(j).toString().length()==0||row.getCell(j).toString().isEmpty()){
                        rowData[j]=IS_EMPTY;
                    }else{
                        rowData[j]=row.getCell(j).toString();
                    }
                }
                sheetData.add(rowData);
            }
            data.put(sheetIndex,sheetData);
            if(!isReadSheets){
                sheetIndex=sheetCounts;
            }
            System.out.println("[2007版本] 工作表: ["+sheet.getSheetName()+"] 读取完成");
            sheetIndex++;
        }
        return data;
    }
}

 

posted @ 2020-07-08 13:07  Cool_Yang  阅读(150)  评论(0)    收藏  举报