poi读取excel数据

package com.java.test.util;

import com.java.test.pojo.ExcelObect;
import com.java.test.pojo.GZInfo;
import org.apache.poi.ss.usermodel.*;

import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class ExcelReader {
    //这里的泛型可以是继承excelobject类
    public static List<? extends ExcelObect> readExcel(String excelPath, int sheetNum, Class<? extends ExcelObect> clazz)  {
        List<ExcelObect> objList = new ArrayList<>();
        try {
            InputStream inp = ExcelUtils.class.getResourceAsStream(excelPath);
            //获取工作簿对象
            Workbook workbook = WorkbookFactory.create(inp);
            //获取第一个sheet页 0代表第一个sheet页面
            Sheet sheet = workbook.getSheetAt(sheetNum-1);
            //获取最大的行数
            int lastRowNum = sheet.getLastRowNum();
            //获得第一列-因为第一行是表头
            Row firstRow = sheet.getRow(0);
            //获得最大的列数 根据表达取最大的列数
            int lastCellNum = firstRow.getLastCellNum();
            //创建一个数组,存放表头
            String[] columnNameArray =new String[lastCellNum];
            //获得表头 --遍历表头
            for (int k =0;k<lastCellNum;k++){
                Cell cell = firstRow.getCell(k, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
                cell.setCellType(CellType.STRING);
                String colunmName = cell.getStringCellValue();
                columnNameArray[k] = colunmName;
            }
            //遍历每一行 i对应着行号
            for (int i=1;i<=lastRowNum;i++){
                // 创建一个对象
                ExcelObect obj = clazz.newInstance();
                //设置行号 这是excelobject里面的set方法
                obj.setRowNum(i+1);
                //获得索引对应的行
                Row row = sheet.getRow(i);
                //遍历每一列
                for (int j =0;j<lastCellNum;j++){
                    //获取当前行的每一列
                    Cell cell = row.getCell(j, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
                    //设置列的类型
                    cell.setCellType(CellType.STRING);
                    //获得该列的值
                    String cellValue = cell.getStringCellValue();
                    String columnName = columnNameArray[j];
                    //得到set方法
                    String setterMethodName = "set"+columnName.substring(0,columnName.indexOf("("));
                    //得到get方法
                    Method setterMethod =clazz.getMethod(setterMethodName,String.class);
                    //原始字符串的参数替换
                    String commonStr =  ParameterUtils.getCommonStr(cellValue);
                    //反射调用该方法(使用反射,增加或者减少excel的表头,只需要修改pojo容器就行)
                    setterMethod.invoke(obj,commonStr);
                }
                objList.add(obj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return objList;
    }
    public static void main(String[] args)  {
        List<GZInfo> objectList = (List<GZInfo>) readExcel("/b.xlsx",1, GZInfo.class);
//        System.out.print(objectList);
        for (GZInfo obj:objectList){
            System.out.print(" 工号:"+obj.getJobId()+" 姓名:"+obj.getName()+" 在职状态:"+obj.getStatus()+" 基本工资:"+obj.getAttendanceDays()+"\n");
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值