java导出大量excel数据(用Java导出各种风格的excel)
我们采用的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 row1 = new LinkedHashMap();
row1.put('姓名', '苹果');
row1.put('颜色', '红/黄/绿');
row1.put('口感', '酸甜');
row1.put('产地', '全国');
Map row2 = new LinkedHashMap();
row2.put('姓名', '香蕉');
row2.put('颜色', '黄');
row2.put('口感', '甜');
row2.put('产地', '南方');
ArrayList
UserInfo userInfo = new UserInfo();
userInfo.setName('张三');
userInfo.setAge(10);
userInfo.setGender('男');
userInfo.setIdCard('3013');
List 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进行调用
然后生成的excel如下: