Java EasyExcel读取Excel表头数据的方法及示例代码

EasyExcel:pom 包
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
</dependency>

创建工具类:EasyExcelUtil

public static <T> List<T> read(InputStream inputStream, final Class<?> clazz,Map<Integer,String> head) throws Exception {
    if (inputStream == null) {
        throw new Exception("解析出错了,文件流是null");
    }
    // 有个很重要的点 DataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
    DataListener<T> listener = new DataListener<>();
    EasyExcel.read(inputStream, clazz, listener).sheet().doRead();
    head.putAll(listener.getHead());
    return listener.getRows();
}
class DataListener<T> extends AnalysisEventListener<T> {//内部类
    private final List<T> rows = new ArrayList<>();
    private Map<Integer, String> head = new HashMap<>();
    @Override
    public void invoke(T t, AnalysisContext analysisContext) {
        rows.add(t);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        log.info("解析完成!读取{}行", rows.size());
    }
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        head.putAll(headMap);
    }
    public List<T> getRows() {
        return rows;
    }
    public Map<Integer, String> getHead() {
        return head;
    }
}

调用:

Map<Integer,String> head = new HashMap<>();
List<BatchSampleALLVO> list = EasyExcelUtil.read(inputStream, BatchSampleALLVO.class,head);

重写:AnalysisEventListener方法,将数据暴露给调用者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
读取Excel文档并返回映射后的Java对象这一操作封装成公共方法可以提高代码的复用性。以下是一个简单的示例,可以帮助你了解如何使用EasyExcel封装读取Excel的公共方法: ```java public class ExcelUtil { /** * 读取Excel数据并将其映射成Java对象 * * @param inputStream 输入流 * @param clazz 映射的Java类 * @param sheetNo Sheet页码(从0开始) * @param headRowNum Excel表头行号(从0开始) * @return 映射后的Java对象列表 */ public static <T> List<T> readExcel(InputStream inputStream, Class<T> clazz, int sheetNo, int headRowNum) throws IOException { ExcelReader reader = EasyExcelFactory.read(inputStream).build(); ReadSheet readSheet = EasyExcelUtil.getReadSheet(clazz, sheetNo, headRowNum); List<T> dataList = reader.read(readSheet); reader.finish(); return dataList; } /** * 获取读取数据的Sheet对象 * * @param clazz 映射的Java类 * @param sheetNo Sheet页码(从0开始) * @param headRowNum Excel表头行号(从0开始) * @return ReadSheet对象 */ public static <T> ReadSheet getReadSheet(Class<T> clazz, int sheetNo, int headRowNum) { Sheet sheet = new Sheet(sheetNo, headRowNum, clazz); sheet.useUnmergedCells(true); sheet.setAutoWidth(true); return EasyExcelUtil.getReadSheet(sheet); } } ``` 在以上示例中,我们首先定义了一个`ExcelUtil`类,并在其中封装了两个公共方法: - `readExcel`方法:用于读取Excel数据并将其映射成Java对象。 - `getReadSheet`方法:用于获取读取数据的Sheet对象。 使用这两个公共方法,我们可以很方便地读取Excel数据并将其映射成Java对象。例如: ```java public class ReadExcelDemo { public static void main(String[] args) throws IOException { // 创建输入流,读取Excel文件 InputStream inputStream = new FileInputStream("test.xlsx"); // 读取Excel数据 List<User> userList = ExcelUtil.readExcel(inputStream, User.class, 0, 0); // 遍历读取到的数据 for (User user : userList) { System.out.println(user); } // 关闭流 inputStream.close(); } } ``` 在以上示例中,我们首先创建了一个输入流,用于读取Excel文件。然后,我们调用`ExcelUtil.readExcel`方法读取Excel数据,并将其映射成`User`对象。最后,我们遍历读取到的数据,并在控制台输出每一行数据的内容。需要注意的是,我们需要确保关闭流,以防止资源泄漏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值