EasyExcel两行表头

例子:
在这里插入图片描述
代码:

StorageService localStorageService = storageFactory.getLocalStorageService();
        String path = "";
        // 文件信息
        String dateTime = DateUtils.formatTimestampToString(new Date());
        String title = "xxx统计";
        String fileName = StringUtils.dbc2sbcCase(title) + "_" + dateTime + EXCEL_SUFFIX;

        File file = null;
        ExcelWriter excelWriter = null;
        WriteSheet writeSheet = null;
        int num = 0;
        try {
            file = localStorageService.newTempFile(fileName);
            excelWriter = EasyExcel.write(file.getPath()).build();

            writeSheet = EasyExcel.writerSheet(title).sheetNo(0).registerWriteHandler(new CustomizeColumnWidth()).build();

            // 写入数据
            List<List<String>> headList = new ArrayList<>();
            headList.add(Lists.newArrayList(title,"数据1"));
            headList.add(Lists.newArrayList(title,"数据2"));
            headList.add(Lists.newArrayList(title,"数据3"));
            //数据
            List<List<String>> objects = new ArrayList<>();
            objects.add(Lists.newArrayList("123","321","222"));

            WriteTable writeTable = EasyExcel.writerTable(num)
                    .head(headList)
                    .registerWriteHandler(ExcelUtils.getStyleStrategy()).build();
            excelWriter.write(Lists.newArrayList(objects), writeSheet, writeTable);
            num++;

        } catch (Exception e) {
            e.printStackTrace();
        }
        if (excelWriter != null) {
            // 写入数据
            List<List<String>> headList = new ArrayList<>();
            String tableTitle = "第二个表题";
            headList.add(Lists.newArrayList(tableTitle,"姓名"));
            headList.add(Lists.newArrayList(tableTitle,"年龄"));
            headList.add(Lists.newArrayList(tableTitle,"性别"));
            //数据
            List<List<String>> objects = new ArrayList<>();
            objects.add(Lists.newArrayList("admin","18","男"));
            objects.add(Lists.newArrayList("admin2","19","男"));

            WriteTable writeTable = EasyExcel.writerTable(num)
                    .head(headList)
                    .registerWriteHandler(ExcelUtils.getStyleStrategy()).build();
            excelWriter.write(Lists.newArrayList(objects), writeSheet, writeTable);
            num++;
            try {
                excelWriter.finish();
                path = FileUtils.uploadFile(file, fileName, orgId, userId);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        // 生成的文件的路径
        return path;

重点:

需要合并列的字段重复设到表头中

List<List<String>> headList = new ArrayList<>();
            headList.add(Lists.newArrayList(title,"数据1"));
            headList.add(Lists.newArrayList(title,"数据2"));
            headList.add(Lists.newArrayList(title,"数据3"));
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EasyExcel是一个方便、易用、高效的Java Excel操作库,广泛应用于各种Java应用程序中。在EasyExcel中,导出动态表头是常见的操作需求,因为有时候表头的列数和列名是不确定的,需要在运行时动态生成。下面将介绍如何使用EasyExcel导出动态表头。 首先需要定义Excel的列头信息,可以通过继承AbstractWriteHandler接口,重写afterSheetCreate方法,在该方法中动态生成列头信息。代码示例如下: ``` public class DynamicHeadExcelHandler implements AbstractWriteHandler { private List<List<String>> headTitles = new ArrayList<>(); @Override public void afterSheetCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, RowWriteHandler rowWriteHandler) { List<String> headTitle1 = new ArrayList<>(); headTitle1.add("姓名"); headTitle1.add("年龄"); headTitles.add(headTitle1); List<String> headTitle2 = new ArrayList<>(); headTitle2.add("性别"); headTitle2.add("地址"); headTitles.add(headTitle2); writeHead(writeSheetHolder, writeTableHolder); } private void writeHead(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder) { int maxColumnSize = getMaxColumnSize(headTitles); Sheet sheet = writeSheetHolder.getSheet(); sheet.createRow(0); for (int i = 0; i < maxColumnSize; i++) { Cell cell = sheet.getRow(0).createCell(i); cell.setCellValue(getCellValue(i)); cell.setCellStyle(getHeadStyle(writeSheetHolder, writeTableHolder)); } CellRangeAddress range = new CellRangeAddress(0, 0, 0, maxColumnSize - 1); sheet.addMergedRegion(range); } private int getMaxColumnSize(List<List<String>> headTitles) { int max = 0; for (List<String> titles : headTitles) { int size = titles.size(); if (size > max) { max = size; } } return max; } private String getCellValue(int index) { StringBuilder builder = new StringBuilder(); for (List<String> titles : headTitles) { if (titles.size() > index) { builder.append(titles.get(index)).append(" "); } } return builder.toString(); } private CellStyle getHeadStyle(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder) { CellStyle cellStyle = writeSheetHolder.getSheet().getWorkbook().createCellStyle(); Font font = writeSheetHolder.getSheet().getWorkbook().createFont(); font.setBold(true); font.setFontHeightInPoints((short) 14); cellStyle.setFont(font); cellStyle.setAlignment(HorizontalAlignment.CENTER); return cellStyle; } } ``` 在上述代码中,我们定义了两行表头信息,每一行都是一个List<String>类型的数据。在afterSheetCreate方法中,我们通过遍历headTitles来动态生成列头信息。然后在writeHead方法中,我们生成了一个合并单元格的行并将列头信息填入其中。 接下来,我们在程序中使用该ExcelHandler,可以通过以下代码实现: ``` ExcelWriter excelWriter = EasyExcel.write(outputStream).registerWriteHandler(new DynamicHeadExcelHandler()).build(); excelWriter.write(data, EasyExcel.writerSheet().build()); excelWriter.finish(); ``` 在上述代码中,我们创建了一个ExcelWriter对象,并将DynamicHeadExcelHandler注册为WriteHandler。然后我们调用write方法将数据写入Excel中。 综上所述,EasyExcel提供了方便的API来实现动态表头的导出,通过继承AbstractWriteHandler接口来实现表头生成。以上就是使用EasyExcel导出动态表头的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值