wd487794332 2025-08-04 15:08 采纳率: 44.1%
浏览 9
已结题

(关键词-数据导出)

因表头是通过查询的数据导出的,我想通过easypoi 将查询的数据跟表头通过多sheet页导出 ,easypoi版本4.4.0

img

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2025-08-04 15:09
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    在使用 EasyPoi(版本 4.4.0)进行数据导出时,如果表头是通过查询动态获取的,并且希望将不同表头的数据导出到不同的 Sheet 页面中,可以通过以下方式实现。


    ✅ 实现目标

    • 动态获取表头信息(如字段名、字段类型等)
    • 根据不同的表头信息,将对应的数据导出到不同的 Sheet
    • 使用 EasyPoi 4.4.0 版本进行多 Sheet 导出

    🧠 关键思路

    1. 动态构建 Excel 模板:根据查询结果动态生成表头。
    2. 使用 ExcelExportUtil 进行多 Sheet 导出
    3. 为每个 Sheet 设置不同的标题和样式(可选)。

    📌 解决方案步骤

    1. 准备数据模型

    定义一个通用的实体类来保存每一行数据,例如:

    public class ExportData {
        private String key;
        private String value;
    
        // 构造方法、getter 和 setter
    }
    

    2. 动态获取表头信息

    假设你从数据库中查询得到表头信息,例如:

    List<String> headers = Arrays.asList("姓名", "年龄", "性别");
    

    3. 构建数据集合

    根据业务逻辑构造数据列表,例如:

    List<ExportData> dataList = new ArrayList<>();
    dataList.add(new ExportData("张三", "25", "男"));
    dataList.add(new ExportData("李四", "30", "女"));
    

    4. 使用 EasyPoi 多 Sheet 导出

    以下是完整的代码示例,展示如何将不同表头的数据导出到多个 Sheet 中:

    import cn.afterturn.easypoi.excel.ExcelExportUtil;
    import cn.afterturn.easypoi.excel.entity.ExportParams;
    import org.apache.poi.ss.usermodel.Workbook;
    
    import java.io.FileOutputStream;
    import java.util.*;
    
    public class MultiSheetExport {
    
        public static void main(String[] args) throws Exception {
            // 假设我们有两个不同的表头和数据集
            List<String> header1 = Arrays.asList("姓名", "年龄", "性别");
            List<ExportData> data1 = Arrays.asList(
                    new ExportData("张三", "25", "男"),
                    new ExportData("李四", "30", "女")
            );
    
            List<String> header2 = Arrays.asList("编号", "名称", "价格");
            List<ExportData> data2 = Arrays.asList(
                    new ExportData("001", "苹果", "5.00"),
                    new ExportData("002", "香蕉", "3.00")
            );
    
            // 创建 Workbook
            Workbook workbook = ExcelExportUtil.exportExcel(
                    new ExportParams("Sheet1", "Sheet1"),
                    ExportData.class,
                    data1
            );
    
            // 添加第二个 Sheet
            int sheetIndex = workbook.getNumberOfSheets();
            workbook.createSheet("Sheet2");
    
            // 设置第二张 Sheet 的表头
            ExportParams exportParams2 = new ExportParams("Sheet2", "Sheet2");
            exportParams2.setHeaders(header2); // 设置自定义表头
    
            // 导出数据到第二张 Sheet
            ExcelExportUtil.exportExcel(workbook, exportParams2, ExportData.class, data2);
    
            // 保存文件
            try (FileOutputStream fos = new FileOutputStream("multi_sheet_export.xlsx")) {
                workbook.write(fos);
            }
    
            System.out.println("导出成功!");
        }
    }
    

    🔍 注意事项

    • 表头设置:EasyPoi 默认会从对象的字段名中提取表头,若要自定义表头,需通过 exportParams.setHeaders(...) 设置。
    • Sheet 名称:通过 new ExportParams("SheetName", "SheetName") 设置 Sheet 名称。
    • 兼容性:EasyPoi 4.4.0 支持多 Sheet 导出,但需要确保正确地创建和管理 Workbook 对象。

    🔄 修改后的完整代码(带注释)

    import cn.afterturn.easypoi.excel.ExcelExportUtil;
    import cn.afterturn.easypoi.excel.entity.ExportParams;
    import org.apache.poi.ss.usermodel.Workbook;
    
    import java.io.FileOutputStream;
    import java.util.*;
    
    public class MultiSheetExport {
    
        public static void main(String[] args) throws Exception {
            // 示例数据
            List<String> header1 = Arrays.asList("姓名", "年龄", "性别");
            List<ExportData> data1 = Arrays.asList(
                    new ExportData("张三", "25", "男"),
                    new ExportData("李四", "30", "女")
            );
    
            List<String> header2 = Arrays.asList("编号", "名称", "价格");
            List<ExportData> data2 = Arrays.asList(
                    new ExportData("001", "苹果", "5.00"),
                    new ExportData("002", "香蕉", "3.00")
            );
    
            // 创建第一个 Sheet
            Workbook workbook = ExcelExportUtil.exportExcel(
                    new ExportParams("Sheet1", "Sheet1"),
                    ExportData.class,
                    data1
            );
    
            // 创建第二个 Sheet
            int sheetIndex = workbook.getNumberOfSheets();
            workbook.createSheet("Sheet2");
    
            // 设置第二个 Sheet 的表头
            ExportParams exportParams2 = new ExportParams("Sheet2", "Sheet2");
            exportParams2.setHeaders(header2);
    
            // 导出数据到第二个 Sheet
            ExcelExportUtil.exportExcel(workbook, exportParams2, ExportData.class, data2);
    
            // 保存文件
            try (FileOutputStream fos = new FileOutputStream("multi_sheet_export.xlsx")) {
                workbook.write(fos);
            }
    
            System.out.println("✅ 多 Sheet 数据导出完成!");
        }
    }
    
    class ExportData {
        private String key;
        private String value;
    
        public ExportData(String key, String value) {
            this.key = key;
            this.value = value;
        }
    
        public String getKey() {
            return key;
        }
    
        public String getValue() {
            return value;
        }
    }
    

    ✅ 总结

    | 步骤 | 内容 | |------|------| | 1 | 定义数据模型 ExportData | | 2 | 动态获取表头信息 | | 3 | 构建数据集合 | | 4 | 使用 ExcelExportUtil 导出到多个 Sheet | | 5 | 设置自定义表头和 Sheet 名称 |

    重点:
    exportParams.setHeaders(...) 是关键方法,用于设置自定义表头。
    ExcelExportUtil.exportExcel(Workbook, ExportParams, Class, List) 用于向已有 Workbook 添加新的 Sheet。


    如果你有更复杂的表头结构或需要处理大量数据,请告诉我,我可以进一步优化代码。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月6日
  • 创建了问题 8月4日