赞
踩
源码地址:https://github.com/alibaba/easyexcel
一、jar包依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.1.2-beta5</version>
</dependency>
本版本是阿里beta测试版 目前网络上有关阿里easyExcel的介绍和demo基本都是这个版本或以下
下面就是demo工具类
public class ExcelUtil { /** * 导出 Excel :一个 sheet,带表头. * * @param response HttpServletResponse * @param list 数据 list,每个元素为一个 BaseRowModel * @param fileName 导出的文件名 * @param sheetName 导入文件的 sheet 名 * @param model 映射实体类,Excel 模型 * @throws Exception 异常 */ public static void writeExcel( HttpServletResponse response, List<? extends BaseRowModel> list, String fileName, String sheetName, BaseRowModel model) throws Exception { ExcelWriter writer = new ExcelWriter(null,getOutputStream(fileName, response), ExcelTypeEnum.XLSX,true,new StyleExcelHandler()); Sheet sheet = new Sheet(1, 0, model.getClass()); sheet.setSheetName(sheetName); writer.write(list, sheet); writer.finish(); } /** * 导出文件时为Writer生成OutputStream. * * @param fileName 文件名 * @param response response * @return "" */ private static OutputStream getOutputStream(String fileName, HttpServletResponse response) throws Exception { try { fileName = URLEncoder.encode(fileName, "UTF-8"); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf8"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx"); response.setHeader("Pragma", "public"); response.setHeader("Cache-Control", "no-store"); response.addHeader("Cache-Control", "max-age=0"); return response.getOutputStream(); } catch (IOException e) { throw new Exception("导出excel表格失败!", e); } }
样式类 在网上拷贝过来的样式类的基础上进行了内存优化 速度优化 public class StyleExcelHandler implements WriteHandler { // 把样式提出来防止重复new private CellStyle cellStyle; @Override public void sheet(int i, Sheet sheet) { Workbook workbook = sheet.getWorkbook(); CellStyle cellStyle = workbook.createCellStyle(); this.cellStyle = createStyle(cellStyle); } @Override public void row(int i, Row row) { } @Override public void cell(int i, Cell cell) { // 从第二行开始设置格式,第一行是表头 从0行开始 if (cell.getRowIndex() > 0) { cell.getRow().getCell(i).setCellStyle(cellStyle); } } /** * 实际中如果直接获取原单元格的样式进行修改, * 最后发现是改了整行的样式, 因此这里是新建一个样式 */ private CellStyle createStyle(CellStyle cellStyle) { // 下边框 cellStyle.setBorderBottom(BorderStyle.THIN); // 左边框 cellStyle.setBorderLeft(BorderStyle.THIN); // 上边框 cellStyle.setBorderTop(BorderStyle.THIN); // 右边框 cellStyle.setBorderRight(BorderStyle.THIN); // 水平对齐方式 cellStyle.setAlignment(HorizontalAlignment.LEFT); // 垂直对齐方式 cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); return cellStyle; }
实体映射Excelproperty 对应导出Excel表头
@Data public class User extends BaseRowModel implements Serializable { /** * value: 表头名称 * index: 列的号, 0表示第一列 * */ /** * 入库时间 */ @ExcelProperty(value = "姓名", index = 0) private String name; /** * 供应商 */ @ExcelProperty(value = "年龄", index = 1) private String age; /** * 纸筒编号 */ @ExcelProperty(value = "性别", index = 2) private String sex; }
测试demo
public void test(){
List<User > list = new HashList<>();
for(int i=0;i<10000;i++){
User user = new User();
user.setName( UUID.randomUUID().toString());
user.setAge("10");
user.setSex("男");
list.add(user);
}
ExcelUtil.writeExcel(response,list,"test","testsheet",user.getClass());
}
虽然是阿里的插件 但还是建议使用正式版 不要使用beta版本 难免会有其他的问题
正式版 2.0.2 版本介绍链接:https://blog.csdn.net/weixin_42083036/article/details/102802644
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。