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

相關文章
相關標籤/搜索