阿里easyexcel通过模板导出excel

easyexcel通过模板导出excel

之前使用其他方式进行excel的导出,像poi或者freemarker或者Beetl,效果都还行,但是总是有一些小问题。许多的解决思路都是:通过制作excel模板,然后另存为xml格式,再对里面的xml节点进行循环遍历或者变量的填充,最后保存为ftl或者btl,再通过他的jar提供的填充方法生成excel。操作起来的话,有些方式有些繁杂,有些方式生成出的excel存在些小问题。其实追根到底,他们都是将其保存为xml进行的操作,流下载的时候保存为xls或者xlsx,但是其本质还是xml文件。所以下载的excel文件,在wps上可以正常打开,但是office打开却有提示:格式与文件扩展名指定的格式不一样,客户体验不好。

在解决生成的excel打开会警告格式与文件扩展名指定的格式不一样,终于找到一个完美的解决方法,那就是alibaba 的easyexcel,经过测试后发现效果很好,操作还很方便,不得不佩服阿里这样的大公司的技术积累。

性能也是刚刚的:64M内存1分钟内读取75M(46W行25列)的Excel

废话不多说,示例地址:


https://alibaba-easyexcel.github.io/quickstart/fill.html


在这里插入图片描述

模板里,普通变量的插值通过 {var}占位,列表则是{.var}。

  1. maven依赖
   <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.2.0-beta1</version>
    </dependency>



  1. File工具类
public class FileUtil {

    public static InputStream getResourcesFileInputStream(String fileName) {
        return Thread.currentThread().getContextClassLoader().getResourceAsStream("" + fileName);
    }

    public static String getPath() {
        return FileUtil.class.getResource("/").getPath();
    }

    public static File createNewFile(String pathName) {
        File file = new File(getPath() + pathName);
        if (file.exists()) {
            file.delete();
        } else {
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
        }
        return file;
    }

    public static File readFile(String pathName) {
        return new File(getPath() + pathName);
    }
}


  1. controller代码
 @Override
    public void exportInfo(HttpServletResponse response) throws IOException {

        OutputStream out = null;
        BufferedOutputStream bos = null;
        try {
            String templateFileName = FileUtil.getPath() + "templates" + File.separator + "模板.xls";

            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");
            String fileName = URLEncoder.encode("下载后的名称.xls", "utf-8");
            response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("UTF-8"), "ISO-8859-1"));

            out = response.getOutputStream();
            bos = new BufferedOutputStream(out);

            //读取Excel
            ExcelWriter excelWriter = EasyExcel.write(bos).withTemplate(templateFileName).build();
            WriteSheet writeSheet = EasyExcel.writerSheet().build();

			//list map 是查询并需导出的数据,并且里面的字段和excel需要导出的字段对应
            // 直接写入Excel数据
            List<Map> list = xxx;
            Map<String,Object> map = yyy;
            excelWriter.fill(list, writeSheet);
            excelWriter.fill(map, writeSheet);
            excelWriter.finish();
            bos.flush();

        } catch (Exception e) {
            
        }
    }


模板放在 templates 目录下

参考的博客是:https://blog.csdn.net/weixin_42153503/article/details/104994360

github地址是:
https://github.com/alibaba/easyexcel

github示例代码
https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java

当然,EasyExcel不仅可以填充Excel模板进行数据导出,它还有常规的读写Excel,官方给的实例代码来看,还是操作简易,入手很快。



现在回想起之前的操作Excel的方法,感觉是比较陈旧,操作繁杂。本来操作Excel就是作为一个"工具人",以前的操作方式代码量很大,还都是重复的造轮子,阿里EasyExcel就如命名一样,基于上层的再构造,原来我们去操作表单和单元格,现在都没有了,只需要关注表格的构造和渲染,而不必要去实现 数据的基础读写,大大的简化了开发的效率!估计也是阿里内部自己基于业务需要Excel的操作,做的东西然后开源出来了,点赞!

EasyExcel阿里巴巴开源的一款强大的Excel数据导入导出工具,它简化了Excel数据操作的复杂度。如果你想用EasyExcel模板Excel添加数据并导出,你可以按照以下步骤操作: 1. **添加依赖**: 首先,在Maven项目中添加EasyExcel的依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>最新版本号</version> </dependency> ``` 2. **准备模板**: 使用EasyExcel提供的`DataModel`接口来描述模板的数据结构,例如,如果你有一个员工信息模板,可以创建如下数据模型: ```java public class EmployeeData implements DataModel<Employee> { private String name; private int age; private String position; // 数据映射规则... @Override public void write(int rowIndex, Employee record, WriteContext context) { // 设置单元格值 context.write(rowIndex, "name", record.getName()); context.write(rowIndex, "age", record.getAge()); context.write(rowIndex, "position", record.getPosition()); } // 其他getter和setter方法... } ``` 3. **读取模板**: 使用`TemplateReadAction`来读取模板文件,获取已有的数据模型作为输入: ```java List<Employee> employeesFromTemplate = EasyExcel.read("template.xlsx", EmployeeData.class) .sheet("Sheet1") // 如果模板有多个sheet,这指定其中一个 .doRead(); ``` 4. **添加数据**: 将你要添加的新数据添加到`employeesFromTemplate`列表中。 5. **合并数据并写入新的Excel文件**: ```java EasyExcel.write("output.xlsx", EmployeeData.class) .sheet("Sheet1") .doWrite(employeesFromTemplate.stream().collect(Collectors.toList())); ``` 6. **运行程序**: 运行上述代码,将会把模板文件和新增数据合并后导出到新的Excel文件。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

soothings

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

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

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

打赏作者

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

抵扣说明:

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

余额充值