Hutool Excel文档链接

Hutool总参考文档官网:https://www.hutool.cn/docs/#/

Hutool Excel 文档连接:https://www.hutool.cn/docs/#/poi/Excel%E5%B7%A5%E5%85%B7-ExcelUtil

上手操作Hutool Excel

导入Maven Hutool总依赖

不同Hutool版本与POI支持不一致,需要前往查看:https://www.hutool.cn/docs/#/poi/%E6%A6%82%E8%BF%B0

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.3</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>

设置Pojo->Excel映射

如果需要设置导出的表格名称 请设置

将来 导出数据的时候 就会直接 将companyName 的列名 叫为 企业名

@Data
@AllArgsConstructor
public class User implements Serializable {

    private String name;

    @Alias("注解年龄,使用注解会覆盖排序,会覆盖掉addHeaderAlias设置的同名标题名")
    private String age;

    private Integer areaId;

    private Date birthday;

    private boolean isman;

    public User(String name, Integer areaId, boolean isman,Date birthday) {
        this.name = name;
        this.areaId = areaId;
        this.isman = isman;
        this.birthday = birthday;
    }


    private static final long serialVersionUID = 1L;
}

调用Hutool API 常规Excel导出

既然说了常规Excel,就说明有非常规Excel,也就是大数据Excel。具体请查看官网BigExcelWriter用法

保存到本地

创建ExcelWrite的时候,指定文件位置即可!如:ExcelUtil.getWriter("d:/writeBeanTest.xlsx");

// 通过工具类创建writer
ExcelWriter writer = ExcelUtil.getWriter("d:/writeBeanTest.xlsx");

// 合并单元格后的标题行,使用默认标题样式
writer.merge(4, "一班成绩单");

// 一次性写出内容,使用默认样式,强制输出标题
writer.write("我是集合数据", true);

// 关闭writer,释放内存
writer.close();

设置响应导出到前端下载(.xls格式)

    public String testAssertUtils(HttpServletResponse response) {

        // 获取的对象List即可
        List<User> userList = new ArrayList<>();
        userList.add(new User("张三", 10, true, new Date(ThreadLocalRandom.current().nextInt(100000000))));
        userList.add(new User("李四", 20, true, new Date(ThreadLocalRandom.current().nextInt(100000000))));
        userList.add(new User("王五", 30, true, new Date(ThreadLocalRandom.current().nextInt(100000000))));


        ExcelWriter writer = ExcelUtil.getWriter();  // 通过工具类创建writer,默认创建xls格式

        // 设置标题设置顺序,如果字段使用@Alias注解,那么此字段排序优先于所有addHeaderAlias。
        writer.addHeaderAlias("name", "姓名")
                .addHeaderAlias("age", "注解与addHeaderAlias在Excel标题设定与排序优先级高,所以本addHeaderAlias在Excel不起作用")
                .addHeaderAlias("areaId", "区域")
                .addHeaderAlias("birthday", "年龄")
                .addHeaderAlias("isman", "是否人类");
        
        // writer.getCell("age").setCellValue(); 这个是设置单元格的,可以对单元格进行更多形式数据格式的操作
        
        writer.autoSizeColumnAll(); // 自动跳转列长度


        writer.write(userList, true);  // 一次性写出数据,使用默认Excel样式。第二个参数:强制输出标题

        // 处理响应对象
        response.reset();
        response.setContentType("application/vnd.ms-excel;charset=utf-8");

        // 设置Excel文件名,文件名不能为中文,中文请自行编码
        response.setHeader("Content-Disposition", "attachment;filename=test.xls");

        // out为OutputStream,需要写出到的目标流
        ServletOutputStream out = null;
        try {
            out = response.getOutputStream();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        // 写入请求
        writer.flush(out, true);
        // 关流
        writer.close();  // 关闭writer,释放内存
        IoUtil.close(out);  // 此处记得关闭输出Servlet流
        return "OK";
    }

Excel文件后缀特别说明

默认是xls格式

ExcelUtil.getWriter()默认创建是xls格式,因此写出到客户端也需要指定filename为XXX.xls,否则会出现文件损坏的提示。

生成xlsx格式

请使用ExcelUtil.getWriter(true)创建。

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        response.setHeader("Content-Disposition","attachment;filename=test.xlsx");

        ServletOutputStream out = null;
        try {
            out = response.getOutputStream();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        writer.flush(out, true);
        writer.close();
        IoUtil.close(out);
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤