1.項目背景
項目中需要生成Excel報表,類似下圖,由於需要動態生成表頭,借此機會,整理EsayExcel使用流程
2.項目依賴
SpringBoot版本2.x
<!--HuTool工具類--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.13</version> </dependency> <!--EasyExcel--> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.4</version> </dependency> <!--POI相關依賴--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency>
3.代碼
動態表格構建思路,表頭可以認為是一個二維數組,按下面的列的數字去構建內存的數組,內層的數組元素的個數就是表頭列的合並單元格后的行數
List<List<Object>> 二維數組
List<Object> 內層數組
public static void main(String[] args) { simpleWrite(); } public static void simpleWrite() { //Excel文件輸的出位置 String outPath = "D:\\excel\\test.xlsx"; try { //創建ExcelWriter寫入對象 ExcelWriter excelWriter = EasyExcel.write(new FileOutputStream(outPath)).build(); //創建Sheet對象 WriteSheet sheet = new WriteSheet(); //設置第N個Sheet sheet.setSheetNo(1); //設置Sheet名稱 sheet.setSheetName("第一個Sheet"); //創建表格對象 WriteTable table = new WriteTable(); //設置第N個表格 table.setTableNo(1); //創建表頭集合 List<List<String>> headList = new ArrayList<List<String>>(); //第N列的表頭 List<String> headTitle1 = new ArrayList<>(); List<String> headTitle2 = new ArrayList<>(); List<String> headTitle3 = new ArrayList<>(); List<String> headTitle4 = new ArrayList<>(); List<String> headTitle5 = new ArrayList<>(); List<String> headTitle6 = new ArrayList<>(); List<String> headTitle7 = new ArrayList<>(); List<String> headTitle8 = new ArrayList<>(); List<String> headTitle9 = new ArrayList<>(); List<String> headTitle10 = new ArrayList<>(); List<String> headTitle11 = new ArrayList<>(); List<String> headTitle12 = new ArrayList<>(); List<String> headTitle13 = new ArrayList<>(); List<String> headTitle14 = new ArrayList<>(); List<String> headTitle15 = new ArrayList<>(); List<String> headTitle16 = new ArrayList<>(); List<String> headTitle17 = new ArrayList<>(); List<String> headTitle18 = new ArrayList<>(); List<String> headTitle19 = new ArrayList<>(); List<String> headTitle20 = new ArrayList<>(); List<String> headTitle21 = new ArrayList<>(); List<String> headTitle22 = new ArrayList<>(); headTitle1.add("日期"); //Dau headTitle2.add("Dau"); headTitle2.add("總"); //第三列 headTitle3.add("Dau"); headTitle3.add("新用戶"); headTitle3.add("Dau"); //第四列 headTitle4.add("Dau"); headTitle4.add("新用戶"); headTitle4.add("%"); //第五列 headTitle5.add("Dau"); headTitle5.add("游戲"); headTitle5.add("Dau"); //第六列 headTitle6.add("Dau"); headTitle6.add("游戲"); headTitle6.add("%"); //第七列 headTitle7.add("Dau"); headTitle7.add("加速"); headTitle7.add("Dau"); //第八列 headTitle8.add("Dau"); headTitle8.add("加速"); headTitle8.add("%"); //第九列 headTitle9.add("Dau"); headTitle9.add("語音"); headTitle9.add("Dau"); //第十列 headTitle10.add("Dau"); headTitle10.add("語音"); headTitle10.add("%"); //===============行為-加速================== //第11列 headTitle11.add("行為"); headTitle11.add("加速"); headTitle11.add("<30分鍾"); headTitle11.add("新用戶"); //第12列 headTitle12.add("行為"); headTitle12.add("加速"); headTitle12.add("<30分鍾"); headTitle12.add("老用戶"); //第13列 headTitle13.add("行為"); headTitle13.add("加速"); headTitle13.add(">30分鍾"); headTitle13.add("新用戶"); //第14列 headTitle14.add("行為"); headTitle14.add("加速"); headTitle14.add(">30分鍾"); headTitle14.add("老用戶"); //===============行為-游戲================== //第15列 headTitle15.add("行為"); headTitle15.add("游戲"); headTitle15.add("<30分鍾"); headTitle15.add("新用戶"); //第16列 headTitle16.add("行為"); headTitle16.add("游戲"); headTitle16.add("<30分鍾"); headTitle16.add("老用戶"); //第17列 headTitle17.add("行為"); headTitle17.add("游戲"); headTitle17.add(">30分鍾"); headTitle17.add("新用戶"); //第18列 headTitle18.add("行為"); headTitle18.add("游戲"); headTitle18.add(">30分鍾"); headTitle18.add("老用戶"); //===============行為-語音================== //第19列 headTitle19.add("行為"); headTitle19.add("語音"); headTitle19.add("<30分鍾"); headTitle19.add("新用戶"); //第20列 headTitle20.add("行為"); headTitle20.add("語音"); headTitle20.add("<30分鍾"); headTitle20.add("老用戶"); //第21列 headTitle21.add("行為"); headTitle21.add("語音"); headTitle21.add(">30分鍾"); headTitle21.add("新用戶"); //第22列 headTitle22.add("行為"); headTitle22.add("語音"); headTitle22.add(">30分鍾"); headTitle22.add("老用戶"); headList.add(headTitle1); headList.add(headTitle2); headList.add(headTitle3); headList.add(headTitle4); headList.add(headTitle5); headList.add(headTitle6); headList.add(headTitle7); headList.add(headTitle8); headList.add(headTitle9); headList.add(headTitle10); headList.add(headTitle11); headList.add(headTitle12); headList.add(headTitle13); headList.add(headTitle14); headList.add(headTitle15); headList.add(headTitle16); headList.add(headTitle17); headList.add(headTitle18); headList.add(headTitle19); headList.add(headTitle20); headList.add(headTitle21); headList.add(headTitle22); table.setHead(headList); List<List<Object>> list = new ArrayList<>(); excelWriter.write(list, sheet, table); // 記得 釋放資源 excelWriter.finish(); System.out.println("ok"); } catch (FileNotFoundException e) { e.printStackTrace(); } }