欢迎来到电脑知识学习网,专业的电脑知识大全学习平台!

手机版

java导出excel数据量大(使用java导出excel各种样式)

网络知识 发布时间:2022-01-04 17:26:48

我们采用的hutool的工具类,对实体类和map进行的excel导出操作

首先创建一个实体类:

@Data // 实现了:1、所有属性的get和set方法;2、toString 方法;3、hashCode方法;4、equals方法
@Builder // 建造者模式
@NoArgsConstructor // 无参构造函数
@AllArgsConstructor // 有参构造函数
public class UserInfo {

    private String name;

    private Integer age;

    private String idCard;

    private String gender;

    private String birthday;

}

然后,我们以接口的形式进行调用

@RestController
@RequestMapping(value = "/excel")
public class TestExcel {

    @GetMapping(value = "/export")
    public void excelExport(HttpServletResponse response) {

        //  以map的方式
        Map<String, Object> row1 = new LinkedHashMap<>();
        row1.put("姓名", "苹果");
        row1.put("颜色", "红/黄/绿");
        row1.put("口感", "酸甜");
        row1.put("产地", "全国");

        Map<String, Object> row2 = new LinkedHashMap<>();
        row2.put("姓名", "香蕉");
        row2.put("颜色", "黄");
        row2.put("口感", "甜");
        row2.put("产地", "南方");

        ArrayList<Map<String, Object>> rows_1 = CollUtil.newArrayList(row1,row2);

        UserInfo userInfo = new UserInfo();
        userInfo.setName("张三");
        userInfo.setAge(10);
        userInfo.setGender("男");
        userInfo.setIdCard("3013");

        List<UserInfo> rows_2 = new ArrayList<>();
        rows_2.add(userInfo);

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

        writer.setSheet("sheet1");
        writer.merge(3, "水果信息");

        // 一次性写出内容,使用默认样式,强制输出标题
        writer.write(rows_1, true);

        writer.setSheet("sheet2");

        writer.addHeaderAlias("name", "姓名");
        writer.addHeaderAlias("age", "年龄");
        writer.addHeaderAlias("idCard", "证件号");
        writer.addHeaderAlias("gender", "性别");
        writer.addHeaderAlias("birthday", "生日");

        writer.merge(4, "人员信息");
        writer.write(rows_2, true);

        //response为HttpServletResponse对象
        response.setContentType("application/vnd.ms-excel;charset=utf-8");

        //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
        response.setHeader("Content-Disposition","attachment;filename=test.xls");

        ServletOutputStream out = null;

        try {

            out = response.getOutputStream();

            writer.flush(out, true);

        } catch(Exception e) {

            e.printStackTrace();

        } finally {

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

            //此处记得关闭输出Servlet流
            IoUtil.close(out);

        }

    }


}

注意:我们第一个sheet用的map,第二个sheet用的实体类

接下来,我们使用postman进行调用

java导出excel数据量大(使用java导出excel各种样式)(1)

然后生成的excel如下:

java导出excel数据量大(使用java导出excel各种样式)(2)

java导出excel数据量大(使用java导出excel各种样式)(3)

责任编辑:电脑知识学习网

网络知识