ExcelUtlis将execl文件中的内容存储到java对象中

本文介绍了一种将Excel数据转换为JavaBean列表的方法,通过反射机制实现数据与对象的自动映射,便于后期维护和扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        很多时候会涉及到execl上传,如果使用数字取标示每一个单元格,日后维护起来将非常麻烦。

        如果将execl单元格中的内容放到List<javaBean>中,一个javaBean对应一行execl中的内容,这样操作execl会很方便。

以后要在execl中添加某一列,对应地在javaBean中添加对应的字段即可。代码维护起来十分方便。


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 org.springframework.web.multipart.MultipartFile;

import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.Field;
import java.util.LinkedList;
import java.util.List;


public class ExcelUtlis {
    /**
     * 
     * @param file          execl文件
     * @param sheetClazz    对应的实体类
     * @param num           读取execl的起始行的索引
     * @param columnNum     读取execl的列数
     * @param <T>
     * @return
     * @throws Exception
     */
    public static <T>List<T> getExcelListData(MultipartFile file, Class sheetClazz, Integer num, Integer columnNum) throws Exception {
        Field[] totalRowClazzFields = sheetClazz.getDeclaredFields();
        Workbook workbook = new XSSFWorkbook(file.getInputStream());
        Sheet sheet = workbook.getSheetAt(0);
        List<T> ts = new LinkedList<>();
        for (int j = num; j < sheet.getLastRowNum() + 1; j++) {
            Row row = sheet.getRow(j);
            T obj = (T) sheetClazz.newInstance();
            for (int k = 0; k < columnNum; k++) {
                String value = "";
                try {
                    value = row.getCell(k).getStringCellValue().trim();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                new PropertyDescriptor(totalRowClazzFields[k].getName(), sheetClazz).getWriteMethod().invoke(obj, value);
            }
            ts.add(obj);
        }
        return ts;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值