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(); } }