通过EasyExcel生成复杂表头、动态表头的数据导出(非注释方式)
- Maven依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
-
实现代码
public class EasyExcelDemo { public static void main(String[] args) throws IOException { List<String> billPeriodList = new ArrayList<>(); billPeriodList.add("202306"); billPeriodList.add("202307"); List<List<String>> incomeSheetHead = getIncomeSheetHead(billPeriodList); List<List<Object>> incomeSheetData = getSheetData(); List<List<String>> paymentSheetHead = getPaymentSheetHead(billPeriodList); List<List<Object>> paymentSheetData = getSheetData(); //文件输出路径 OutputStream out = new FileOutputStream("C:\\Users\\86138\\Desktop\\text.xlsx"); ExcelWriter writer = EasyExcelFactory.write(out).build(); WriteSheet incomeSheet = new WriteSheet(); incomeSheet.setSheetName("收入"); incomeSheet.setSheetNo(0); WriteTable incomeTable = new WriteTable(); incomeTable.setTableNo(1); incomeTable.setHead(incomeSheetHead); writer.write(incomeSheetData, incomeSheet, incomeTable); WriteSheet paymentSheet = new WriteSheet(); paymentSheet.setSheetName("成本"); paymentSheet.setSheetNo(2); WriteTable paymentTable = new WriteTable(); paymentTable.setTableNo(1); paymentTable.setHead(paymentSheetHead); writer.write(paymentSheetData, paymentSheet, paymentTable); writer.finish(); out.close(); } private static List<List<String>> getPaymentSheetHead(List<String> billPeriodList) { List<List<String>> headTitles = Lists.newArrayList(); //固定title String emptyHead = "", billPeriodHead = "账期", summaryHead = "累计"; headTitles.add(Lists.newArrayList(emptyHead, emptyHead, "供应商名称")); List<String> paymentTitles = Lists.newArrayList("已付", "未付", "佣金", "合计", "均单价", "订单量"); for (String billPeriod : billPeriodList) { for (String paymentTitle : paymentTitles) { headTitles.add(Lists.newArrayList(billPeriodHead, billPeriod, paymentTitle)); } } for (String paymentTitle : paymentTitles) { headTitles.add(Lists.newArrayList(summaryHead, summaryHead, paymentTitle)); } return headTitles; } private static List<List<String>> getIncomeSheetHead(List<String> billPeriodList) { List<List<String>> headTitles = Lists.newArrayList(); //固定title String emptyHead = "", billPeriodHead = "账期", summaryHead = "累计"; headTitles.add(Lists.newArrayList(emptyHead, emptyHead, "客户名称")); List<String> incomeTitles = Lists.newArrayList("已收", "未收", "佣金", "合计", "均单价", "订单量"); //根据账期生成固定title for (String billPeriod : billPeriodList) { for (String incomeTitle : incomeTitles) { headTitles.add(Lists.newArrayList(billPeriodHead, billPeriod, incomeTitle)); } } for (String incomeTitle : incomeTitles) { headTitles.add(Lists.newArrayList(summaryHead, summaryHead, incomeTitle)); } return headTitles; } private static List<List<Object>> getSheetData() { List<List<Object>> sheetDataList = Lists.newArrayList(); BigDecimal amount = new BigDecimal(500); List<FinanceAmountDetail> amountDetailList = new ArrayList<>(); amountDetailList.add(new FinanceAmountDetail(new BigDecimal(500), "CNY")); String amountStr = getAmountStr(amountDetailList); String avgAmount = "CNY:1"; sheetDataList.add(Lists.newArrayList("携程", amountStr, amountStr, amountStr, amountStr, avgAmount, amount, amountStr, amountStr, amountStr, amountStr, avgAmount, amount, amountStr, amountStr, amountStr, amountStr, avgAmount, amount)); sheetDataList.add(Lists.newArrayList("美团", amountStr, amountStr, amountStr, amountStr, avgAmount, amount, amountStr, amountStr, amountStr, amountStr, avgAmount, amount, amountStr, amountStr, amountStr, amountStr, avgAmount, amount)); return sheetDataList; } private static String getAmountStr(List<FinanceAmountDetail> amountDetailList) { StringBuilder amountBuilder = new StringBuilder(); for (FinanceAmountDetail amountDetail : amountDetailList) { amountBuilder.append(amountDetail.getCurrency()).append(":").append(amountDetail.getAmount()).append(";"); } amountBuilder.deleteCharAt(amountBuilder.lastIndexOf(";")); return amountBuilder.toString(); } } -
效果图
![]()



浙公网安备 33010602011771号