EasyExcel 导出Excel

前言

Java 程序员须要读取 Excel 信息到 数据库 或者把 数据库 数据导出到 Excel 的需求,应该会想起 Apache POI 的方案。POI在业界公认的消耗内存容易内存溢出,可是这个不是我用 EasyExcel 的主要理由,我以为主要是 EasyExcel 的使用是在是太简单了。html

WEB下载

@GetMapping("/excel")
@ApiOperation(value = "导出", notes = "导出")
public void excel(HttpServletResponse response, AttractInvestmentParam attractInvestmentParam) throws IOException {
	response.setContentType("application/vnd.ms-excel");
	response.setCharacterEncoding("utf-8");
  	// 保证下载到本地文件名不乱码的
	String fileName = URLEncodez zr.encode("模版", "UTF-8");
	response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
 	// List<模型> 的数据体,替换成本身的业务代码便可
	List<ZhAttractInvestmentQueryVO> aiList = zhAttractInvestmentService.attractInvestmentExcel(attractInvestmentParam);
	EasyExcel.write(response.getOutputStream(), ZhAttractInvestmentQueryVO.class).sheet("sheet").doWrite(aiList);
	}
复制代码

你须要处理你的导出模型:把你须要导出的数据封装成实体类,在属性上面加上 @ExcelProperty("名称")java

@ExcelProperty(value = "名称")
private String name;
复制代码

导出结果:git

自定义处理


若是须要把导出的 Integer 类型的数字转换成相对应的字符串,以前的选择是让全部的字段都是用 String ,而后在数据库用 if 语句进行判断,字段少的话还行,若是字段多就会让你的 SQL 语句变得很不友好。程序员

如今用 EasyExcel 后你能够在注解上是用自定义转换器 在官方文档有简单的使用。github

@ExcelProperty(value = "投资方式",converter = InvestmentModeConverter.class)
private Integer investmentMode;
复制代码

converter = InvestmentModeConverter.class 这个就是转换的核心类,下面是这个类的代码数据库

public class InvestmentModeConverter implements Converter<Integer> {

   //这个是须要被转换结果或者匹配内容
   private static final String A = "独资";
   private static final String B = "合资";
   private static final String C = "独资或合资";

  //这个接口是返回Java中的对象类型
   @Override
   public Class supportJavaTypeKey() {
      return Integer.class;
   }
  //这个接口是返回到Excel的类型
   @Override
   public CellDataTypeEnum supportExcelTypeKey() {
      return CellDataTypeEnum.STRING;
   }
    /** * convertToJavaData 从方法名就能看出来 转换成Java数据,把Excel转换成实体类 * 解析数据就用到的是这个方法 * 要是表格内容是 独资 到 实体类 后就变成 Integer类型 1;合资 到 实体类 后就变成 Integer类型 2 */
   @Override
   public Integer convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
      String stringValue = cellData.getStringValue();
      if (A.equals(stringValue)) {
         return 1;
      } else if (B.equals(stringValue)) {
         return 2;
      } else {
         return 3;
      }
   }
    /** * 这个方法是咱们的主角 convertToExcelData 翻译过来就是 转换到 Excel 数据 * 和上面的方法相似,只不过反了下,实体类字段的值是 1 就转换成 独资;2 转换成 独资 */
   @Override
   public CellData convertToExcelData(Integer integer, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
      CellData cellData;
      if (integer == 1) {
         cellData = new CellData(A);
      } else if (integer == 2) {
         cellData = new CellData(B);
      } else {
         cellData = new CellData(C);
      }
      return cellData;
   }
}
复制代码

最后

到这里导出基本就没上面障碍了,还有同窗须要使用到多表头,写入到指定列,写入模版,填充 Excel ,读取 Excel 等等之类的操做,在 alibaba-easyexcel.github.io/index.html 这个 alibaba/easyexcel 项目的文档下都有,超级好用,简单,固然我这个自定义转换器文档没介绍。app

相关文章
相关标签/搜索