EasyExcel基本使用

1.背景

目前接手的项目中涉及到很多数据的处理,对文件的导入导出操作非常多,EasyExcel很方便的提供了多种操作excel文件的api。

2.基本使用

2.1 注解

@ExcelProperty	用于匹配excel和实体类的匹配

@ExcelIgnore   默认所有字段都会和excel去匹配,加了这个注解会忽略该字段
@ExcelIgnoreUnannotated   默认不加ExcelProperty 的注解的都会参与读写,加了不会参与读写

2.2 excel导出操作

设置web导出操作的导出头
    public OutputStream getExportResponseStream(HttpServletResponse response, String fileName,Byte excelType) throws
            IOException {
        response.setContentType("application/octet-stream");
        if (ExcelSuffixType.XLSX.getCode().equals(excelType)) {
            String allFileName = fileName + ExcelSuffixType.XLSX.getDesc();
            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(allFileName, ENCODE));
        } else if (ExcelSuffixType.XLS.getCode().equals(excelType)){
            String allFileName =  fileName + ExcelSuffixType.XLS.getDesc();
            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(allFileName, ENCODE));
        }
        return response.getOutputStream();
    }

基本导出操作
	@Test
    public void simpleWrite() {
        // 注意 simpleWrite在数据量不大的情况下可以使用(5000以内,具体也要看实际情况),数据量大参照 重复多次写入

        // 写法1 JDK8+
        // since: 3.0.0-beta1
        String fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";
        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可
        EasyExcel.write(fileName, DemoData.class)
            .sheet("模板")
            .doWrite(() -> {
                // 分页查询数据
                return data();
            });

        // 写法2
        fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";
        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可
        EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());

        // 写法3
        fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";
        // 这里 需要指定写用哪个class去写
        try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build()) {
            WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();
            excelWriter.write(data(), writeSheet);
        }
    }

导出操作中通过ExcelWriter可以设置密码

public <T> OutputStream exportSheet(OutputStream out, String userCode,String fileName,Boolean encryption, ExcelTypeEnum type, List<T>
            data, Class c, int sheetNum, String sheetName) {
        ExcelWriter writer = new ExcelWriterBuilder().head(c).password(password).file(out).excelType(type).build();
        WriteSheet sheet = new WriteSheet();
        sheet.setSheetName(sheetName);
        sheet.setSheetNo(sheetNum);
        writer.write(data, sheet);
        writer.finish();
        return out;
    }

2.3 excel导入操作

目前接手的项目之前读取数据很混乱有用POI有HuTool等进行导入全部解析成List<List>,对导入操作基本上就是解析数据,校验数据,导入数据。

基本导入
try {
			EasyExcel.read(file.getInputStream(),Record.class, new ReadListener<Record>() {
				@Override
				public void invoke(Recorddata, AnalysisContext context) {
					// 对每一条数据的操作
				}
				@Override
				public void doAfterAllAnalysed(AnalysisContext context) {
					// 对所有数据解析完后回调
				}

				@Override
				public void onException(Exception exception, AnalysisContext context) throws Exception {
					当出现异常时执行
				}
			}).sheet().doRead();
		catch (IOException e) {
			// 异常处理
		}
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

道古九封

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

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

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

打赏作者

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

抵扣说明:

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

余额充值