java读取Excel文件数据

java解析Excel(xls、xlsx两种格式)

1、导入jar包

1.commons-collections4-4.1.jar
2.poi-3.17-beta1.jar
3.poi-ooxml-3.17-beta1.jar
4.poi-ooxml-schemas-3.17-beta1.jar
5.xmlbeans-2.6.0.jar

2、主要api

1.import org.apache.poi.ss.usermodel.Workbook,对应Excel文档;
2.import org.apache.poi.hssf.usermodel.HSSFWorkbook,对应xls格式的Excel文档;
3.import org.apache.poi.xssf.usermodel.XSSFWorkbook,对应xlsx格式的Excel文档;
4.import org.apache.poi.ss.usermodel.Sheet,对应Excel文档中的一个sheet;
5.import org.apache.poi.ss.usermodel.Row,对应一个sheet中的一行;
6.import org.apache.poi.ss.usermodel.Cell,对应一个单元格。

3、代码



import cn.ssms.model.vo.GameBookVo;
import cn.ssms.model.vo.MusicVo;
import cn.ssms.model.vo.VideoVo;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * @author 作者:李泽庆 郝志宏
 * @version 创建时间:2021/7/8 17:16
 * @email 邮箱:lzq905866484@163.com
 * @description 描述:
 */
public class ExcelUtils {

    public static final String FILE_PATH = "E:\\sinosoft\\海警\\娱乐上传规则(2).xlsx";
    //读取excel
    public static Workbook readExcel(String filePath){
        Workbook wb = null;
        if(filePath==null){
            return null;
        }
        String extString = filePath.substring(filePath.lastIndexOf("."));
        InputStream is = null;
        try {
            is = new FileInputStream(filePath);
            if(".xls".equals(extString)){
                return wb = new XSSFWorkbook(is);
            }else if(".xlsx".equals(extString)){
                return wb = new XSSFWorkbook(is);
            }else{
                return wb = null;
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return wb;
    }

    public static Object getCellFormatValue(Cell cell){
        Object cellValue = null;
        if(cell!=null){
            //判断cell类型
            switch(cell.getCellType()){
                case Cell.CELL_TYPE_NUMERIC:{
                    cellValue = String.valueOf((int)cell.getNumericCellValue());
                    break;
                }
                case Cell.CELL_TYPE_FORMULA:{
                    //判断cell是否为日期格式
                    if(DateUtil.isCellDateFormatted(cell)){
                        //转换为日期格式YYYY-mm-dd
                        cellValue = cell.getDateCellValue();
                    }else{
                        //数字
                        cellValue = String.valueOf(cell.getNumericCellValue());
                    }
                    break;
                }
                case Cell.CELL_TYPE_STRING:{
                    cellValue = cell.getRichStringCellValue().getString();
                    break;
                }
                default:
                    cellValue = "";
            }
        }else{
            cellValue = "";
        }
        return cellValue;
    }

    public static List<GameBookVo> getGameFormExcel(){
        List<GameBookVo> gameVos = new ArrayList<>();
        List<Object> objects = readInfo(FILE_PATH,  GameBookVo.class, 3);
        for (Object object : objects) {
            gameVos.add((GameBookVo)object);
        }
        return gameVos;
    }

    public static List<GameBookVo> getBookFormExcel(){
        List<GameBookVo> bookVos = new ArrayList<>();
        List<Object> objects = readInfo(FILE_PATH,  GameBookVo.class, 2);
        for (Object object : objects) {
            bookVos.add((GameBookVo)object);
        }
        return bookVos;
    }


    public static List<MusicVo> getMusicFormExcel(){
        List<MusicVo> bookVos = new ArrayList<>();
        List<Object> objects = readInfo(FILE_PATH, MusicVo.class, 1);
        for (Object object : objects) {
            bookVos.add((MusicVo)object);
        }
        return bookVos;
    }

    public static List<VideoVo> getVideoFormExcel(){
        List<VideoVo> videoVos = new ArrayList<>();
        List<Object> objects = readInfo(FILE_PATH, VideoVo.class, 0);
        for (Object object : objects) {
            videoVos.add((VideoVo)object);
        }
        return videoVos;
    }

    /**
     *
     * @param filePath 文件路径
     * @param cla 接受类
     * @param SheetNum 表
     * @return
     */
    public static List<Object> readInfo(String filePath,  Class cla, Integer SheetNum){
        Workbook wb =null;
        Sheet sheet = null;
        Row row = null;
        List<Object> list = null;
        String[] columns;
        String cellData = null;
        try{
            wb = readExcel(filePath);
            if(wb != null){
                //用来存放表中数据
                list = new ArrayList<>();
                //获取第一个sheet
                sheet = wb.getSheetAt(SheetNum);
                //获取最大行数
                int rownum = sheet.getPhysicalNumberOfRows();
                System.out.println("最大行数:"+rownum);
                //获取第一行
                row = sheet.getRow(0);
                //获取最大列数
                int colnum = row.getPhysicalNumberOfCells();
                columns = loadResourcesVo(row, colnum);
                System.out.println("最大列数:"+colnum);
                for (int i = 1; i<rownum; i++) {
                    //获取当前行
                    row = sheet.getRow(i);
                    if(row !=null){
                        //反射创建当前Class实例
                        Object o = cla.newInstance();
                        for (int j = 0; j < columns.length; j++) {
                            String metName = columns[j];
                            metName = "set"+metName.substring(0,1).toUpperCase()+metName.substring(1);
                            //获取当前对象下的方法集合
                            Method[] methods = cla.getMethods();
                            for (Method method : methods) {
                                //判断方法名
                                if(method.getName().equals(metName)){
                                    //获取当前方法参数类型集合
                                    Class<?>[] parameterTypes = method.getParameterTypes();
                                    //取第一个参数类型
                                    Class<?> type = parameterTypes[0];
                                    //判断参数类型
                                    if(type.getSimpleName().equals("Integer")){
                                        Method m = cla.getMethod(metName, Integer.class);
                                        String str = (String) getCellFormatValue(row.getCell(j));
                                        m.invoke(o,Integer.parseInt(StringUtils.isEmpty(str)?"0":str));
                                    }else if(type.getSimpleName().equals("Double") ){
                                        Method m = cla.getMethod(metName, Double.class);
                                        String str = (String) getCellFormatValue(row.getCell(j));
                                        m.invoke(o, Double.parseDouble(StringUtils.isEmpty(str)?"0.0":str));
                                    }else{
                                        method.invoke(o,getCellFormatValue(row.getCell(j)));
                                    }

                                }
                            }
                        }
                        list.add(o);

                    }else{
                        break;
                    }
                }
            }

        }catch (Exception e){
            e.printStackTrace();
        }
                //遍历解析出来的list
                return list;
        }


    public static String[] loadResourcesVo(Row row,Integer column) {
        String[] cloumns = new String[column];
        for (int i = 0; i < column; i++) {
            String temp = (String) getCellFormatValue(row.getCell(i));
            if(temp.equals("电影名字") || temp.equals("歌名") || temp.equals("书名") || temp.equals("游戏名字")){
                cloumns[i] = "name";
            }
            if(temp.equals("导演") || temp.equals("歌手") || temp.equals("作者")){
                cloumns[i] = "author";
            }
            if(temp.equals("类别(电影、电视、综艺)") || temp.equals("分类")){
                cloumns[i] = "categoryStr";
            }
            if(temp.equals("语种")){
                cloumns[i] = "lan";
            }
            if(temp.equals("集数")){
                cloumns[i] = "sets";
            }
            if(temp.equals("年份")){
                cloumns[i] = "videoYear";
            }
            if(temp.equals("演员")){
                cloumns[i] = "actor";
            }
            if(temp.equals("介绍")){
                cloumns[i] = "introduction";
            }
            if(temp.equals("图片路径")){
                cloumns[i] = "image";
            }
            if(temp.equals("评分")){
                cloumns[i] = "score";
            }
            if(temp.equals("资源路径")){
                cloumns[i] = "url";
            }

            if(temp.equals("编号")){
                cloumns[i] = "index";
            }


        }
        return cloumns;
    }


    //写入excel
    public static void writeExcel(){
        // 创建工作薄 xlsx
        XSSFWorkbook  xssWorkbook = new XSSFWorkbook();
        // 创建工作表
        XSSFSheet sheet = xssWorkbook.createSheet("sheet1");

        for (int row = 0; row < 10; row++)
        {
            XSSFRow rows = sheet.createRow(row);
            for (int col = 0; col < 10; col++)
            {
                // 向工作表中添加数据
                rows.createCell(col).setCellValue("data" + row + col);
            }
        }
//
        File xlsFile = new File("poi.xlsx");
        FileOutputStream xlsStream = null;
        try {
            xlsStream = new FileOutputStream(xlsFile);
            xssWorkbook.write(xlsStream);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    public static void main(String[] args) throws Exception, IllegalAccessException, InstantiationException {
        List<GameBookVo> gameFormExcel = getGameFormExcel();
        System.out.println(gameFormExcel);
        List<GameBookVo> bookFormExcel = getBookFormExcel();
        System.out.println(bookFormExcel);
        List<MusicVo> musicFormExcel = getMusicFormExcel();
        System.out.println(musicFormExcel);
        List<VideoVo> videoFormExcel = getVideoFormExcel();
        System.out.println(videoFormExcel);


    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。