java用easyexcel导入导出excel

本文介绍如何使用EasyExcel进行Excel的导出与导入操作,包括在Maven项目中添加依赖、创建导出和导入的控制器方法,以及实现Excel监听器来处理数据。EasyExcel简化了Excel操作的复杂性,提供了高效的数据处理方式。

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

easyexcel导出excel模板

pom文件添加jar依赖

   <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.1.4</version>
    </dependency>

导出excle

    @GetMapping("export")
    public void export(CivilizedLuckyDrawQuery query, HttpServletResponse response) {
        DataResult<DrawVO> luckyDrawVODataResult = luckyDrawService.queryCivilizedList(query);
        List<DrawVO> data = luckyDrawVODataResult.getData();
        try {
            String fileName = "excel命名_"+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
            String sheetName = "sheet命名";
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");
            fileName = URLEncoder.encode(fileName, "UTF-8");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");
            EasyExcel.write(response.getOutputStream(), CivilizedLuckyDrawVO.class).sheet(sheetName).doWrite(data);
        } catch (IOException e) {
            log.error("导出异常,e: {}", e);
        }
    }

导入excel

	/**
     * 解析excel取得数据
     *
     * @param tempFile
     * @param suffix_flex
     * @return
     */
    public List<List<String>> getDatasByDealExcel(File tempFile, String suffix_flex) {
        InputStream in = null;
        try {
            in = new FileInputStream(tempFile);
            ExcelListener listener = new ExcelListener();
            ExcelTypeEnum type = suffix_flex.equals(".xls") ? ExcelTypeEnum.XLS : ExcelTypeEnum.XLSX;
            ExcelReader excelReader = new ExcelReader(in, type, null, listener);
            excelReader.read();
            //线面的获取也是正确的
            //Sheet sheet = new Sheet(1, 1);
            // List<Object> list = EasyExcelFactory.read(in, sheet);
            List<List<String>> datas = listener.getDatas();

            return datas;
        } catch (Exception e) {

        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                log.error("excel文件读取失败, 失败原因:{}", e);
            }
        }
        return null;
    }

ExcelListener代码展示;

@Component
public class ExcelListener extends AnalysisEventListener {

    public List<List<String>> datas = new ArrayList<>();

    @Override
    public void invoke(Object o, AnalysisContext analysisContext) {
        List<String> stringList= (List<String>) o;
        System.out.println("当前sheet"+analysisContext.getCurrentSheet().getSheetNo()+ " 当前行:" + analysisContext.getCurrentRowNum()
                + " data:" + stringList.get(0));
        datas.add(stringList);//数据存储到list,供批量处理,或后续自己业务逻辑处理。
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }

    public List<List<String>> getDatas() { return datas; }
    public void setDatas(List<List<String>> datas) { this.datas = datas; }
}
### 使用EasyExcel实现Excel文件的导入和导出 #### EasyExcel简介 EasyExcel 是一个基于 Java 的简单、省内存的读写 Excel 的开源项目。该工具能够在尽可能节约内存的情况下处理大容量的 Excel 文件,支持读取和写入数百兆大小的数据[^2]。 #### 实现Excel文件的导出功能 为了使用 EasyExcel 导出数据到 Excel 文件,可以创建一个新的工作簿并定义要保存的内容结构: ```java import com.alibaba.excel.EasyExcel; import java.util.ArrayList; import java.util.List; public class ExportExample { public static void main(String[] args) { String fileName = "example.xlsx"; List<UserData> data = new ArrayList<>(); // 填充data列表 EasyExcel.write(fileName, UserData.class).sheet("Sheet1").doWrite(data); } } ``` `UserData` 类应包含与表格列对应的字段以及相应的 getter 和 setter 方法。 #### 实现Excel文件的导入功能 对于导入操作,则需指定解析规则并通过监听器来接收每一行的数据对象实例化后的回调通知。这里展示了如何设置带有 Spring 注入能力的自定义监听器类 `UserImportListener` 来完成这一过程: ```java import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.PostConstruct; // 自定义监听器用于处理每条记录 public class UserImportListener extends AnalysisEventListener<UserData> { @Autowired private UserService userService; // 这里假设有一个服务层接口 @PostConstruct public void init() {} @Override protected void invoke(UserData userData, AnalysisContext context) { // 对于每一个读取出来的对象执行业务逻辑 userService.save(userData); } @Override public void doAfterAllAnalysed(AnalysisContext context) { System.out.println("所有数据解析完成!"); } } // 调用此方法启动导入流程 public void importExcel(MultipartFile file){ try{ EasyExcel.read(file.getInputStream(), UserData.class, new UserImportListener()).sheet().doRead(); }catch (Exception e){ throw new RuntimeException(e.getMessage()); } } ``` 上述代码片段中,通过将 `UserService` 组件自动装配至监听器内实现了依赖注入的功能,从而可以在每次接收到新行时调用其提供的持久化方法[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_22764659

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值