LlewynDav 2023-10-19 09:57 采纳率: 42.9%
浏览 27

EasyExcel横向拼接两个Table到同一个Sheet内如何实现?


   private void writeInfo(Long projectId, ExcelWriter excelWriter) {
        Long i = 1714225694419103746L;
        Long j = 1714225747221196802L;
        // 评价信息表
        List<ResultExcelVO> infoExcelVOS = ConvertUtils.sourceToTarget(eraProjectDetailServiceImpl.getDetailResult(i), ResultExcelVO.class);
        List<ResultExcelVO> infoExcelVOS2 = ConvertUtils.sourceToTarget(eraProjectDetailServiceImpl.getDetailResult(j), ResultExcelVO.class);
        WriteSheet sheetResult = EasyExcel.writerSheet(1, "评价信息表")
                .head(ResultExcelVO.class)
                .registerWriteHandler(new CustomCellWriteUtil())
                .registerWriteHandler(ExcelUtils.getStyleStrategy())
                .build();
        WriteTable table = EasyExcel.writerTable().head(ResultExcelVO.class).build();
        excelWriter.write(infoExcelVOS, sheetResult, table);
        WriteTable table2 = EasyExcel.writerTable().head(ResultExcelVO.class).build();
        excelWriter.write(infoExcelVOS2, sheetResult, table2);

        System.out.println("-------------------------------------------信息表构建完成-----------------------------------------");
    }

img

我想用EasyExcel横向拼接两个不同表头的表格在一个excel的同一个sheet里,但是这么写只能表头拼表头,数据拼数据,而且是竖向的,请问该怎么改

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-19 20:18
    关注

    【以下回答由 GPT 生成】

    解决问题的思路如下:

    1. 首先,为了实现表头的横向拼接,需要将两个不同表头的表格转换成相同的数据结构。
    2. 然后,将转换后的数据横向拼接起来,并写入同一个Sheet中。

    具体解决方案如下:

    private void writeInfo(Long projectId, ExcelWriter excelWriter) {
        Long i = 1714225694419103746L;
        Long j = 1714225747221196802L;
    
        // 获取两个不同表头的数据
        List<ResultExcelVO> infoExcelVOS1 = ConvertUtils.sourceToTarget(eraProjectDetailServiceImpl.getDetailResult(i), ResultExcelVO.class);
        List<ResultExcelVO> infoExcelVOS2 = ConvertUtils.sourceToTarget(eraProjectDetailServiceImpl.getDetailResult(j), ResultExcelVO.class);
    
        // 将数据结构转换为横向拼接的格式
        List<List<Object>> data = new ArrayList<>();
        for (int k = 0; k < Math.max(infoExcelVOS1.size(), infoExcelVOS2.size()); k++) {
            List<Object> rowData = new ArrayList<>();
            if (k < infoExcelVOS1.size()) {
                ResultExcelVO info1 = infoExcelVOS1.get(k);
                rowData.addAll(Arrays.asList(info1.getField1(), info1.getField2(), info1.getField3()));  // 添加第一个表格的数据列
            } else {
                rowData.addAll(Arrays.asList("", "", ""));  // 空数据列
            }
            if (k < infoExcelVOS2.size()) {
                ResultExcelVO info2 = infoExcelVOS2.get(k);
                rowData.addAll(Arrays.asList(info2.getField4(), info2.getField5(), info2.getField6()));  // 添加第二个表格的数据列
            } else {
                rowData.addAll(Arrays.asList("", "", ""));  // 空数据列
            }
            data.add(rowData);  // 添加该行数据
        }
    
        // 写入Excel
        WriteSheet sheetResult = EasyExcel.writerSheet(1, "评价信息表")
                .head(head())
                .registerWriteHandler(new CustomCellWriteUtil())
                .registerWriteHandler(ExcelUtils.getStyleStrategy())
                .build();
        excelWriter.write(data, sheetResult);
    
        System.out.println("-----------------------------------信息表构建完成-----------------------------------");
    }
    
    // 表头的格式
    private List<List<String>> head() {
        List<List<String>> head = new ArrayList<>();
        List<String> head1 = Arrays.asList("表1列1", "表1列2", "表1列3");
        List<String> head2 = Arrays.asList("表2列1", "表2列2", "表2列3");
        head.add(head1);
        head.add(head2);
        return head;
    }
    

    注意事项:

    1. 根据你的实际需求,你需要根据ResultExcelVO类的具体内容来修改表头和数据的拼接逻辑。
    2. 这个解决方案基于假设:两个表格的行数是一样的。如果两个表格的行数不一样,你需要根据具体情况做相应的处理。


    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月19日

悬赏问题

  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端