通过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();
        }
    }
    
  • 效果图

posted @ 2023-08-17 22:57  程序员XJ  阅读(2948)  评论(0)    收藏  举报