# easy-excel **Repository Path**: wrxfxdd/easy-excel ## Basic Information - **Project Name**: easy-excel - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-12-10 - **Last Updated**: 2025-12-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # easy-excel 一个基于 **Apache POI** 的 Excel 导出组件:通过注解描述“动态字段 / 表格 / 合计”,即可把数据写到 `HttpServletResponse`。 ## 引入 ```xml io.gitee.wrxfxdd easy-excel 1.0.2 ``` ## 使用(3 个点:动态字段 / 表格 / 总计) ### 1)动态字段(完全自定义) 在一个对象上用 `@ExcelPosition` 标注要写入 Excel 的“额外字段”(标题、表后字段、底部字段等): ```java import com.easyexcel.annotation.ExcelPosition; import com.easyexcel.annotation.ExcelPosition.RowDyn; import lombok.Data; import static com.easyexcel.annotation.ExcelPosition.LAST_TABLE; @Data public class DynamicFields { // 固定位置:row + col/colsMerge @ExcelPosition(row = 0, colsMerge = {0, 7}) private String title; @ExcelPosition(row = 1, colsMerge = {0, 7}) private String subTitle; // 相对位置:rowDyn(table=0 表示第一张表;table=LAST_TABLE 表示最后一张表) @ExcelPosition(label = "收银员:", colsMerge = {0, 2}, rowDyn = @RowDyn(table = 0, after = 1)) private String cashier; @ExcelPosition(label = "备注:", col = 0, rowDyn = @RowDyn(table = LAST_TABLE, after = 2)) private String remark; } ``` ### 2)表格(完全自定义) 表格行对象用 `@ExcelColumn` 定义:表头、列顺序、横向合并、纵向合并等。 ```java import com.easyexcel.annotation.ExcelColumn; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor public class OrderDO { @ExcelColumn(value = "交易月份", order = 0, mergeRows = true) private String month; @ExcelColumn(value = "实收金额", order = 1) private String paidAmount; @ExcelColumn(value = "应收金额", order = 2) private String receivableAmount; } ``` ### 3)总计(可选,完全自定义) 每个表都可以附带一个“合计对象”,同样通过 `@ExcelColumn` 控制输出列: ```java import com.easyexcel.annotation.ExcelColumn; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor public class OrderSumDTO { @ExcelColumn(value = "合计", order = 0, mergeColumn = 2) private String label; @ExcelColumn(value = "实收金额", order = 1) private String paidAmount; } ``` ## 最小示例(多表 + 合计 + 动态字段) ```java ExcelExporter.export(response, "订单报表", "订单数据", fields, request -> request .addFirstTable(orderList, orderSum, 3) .addTable(detailList, detailSum, 2) ); ``` ## 单表简写 ```java // 单表 + 动态字段 ExcelExporter.export(response, "订单报表", "订单数据", fields, orderList); // 单表(无动态字段) ExcelExporter.export(response, "订单报表", "订单数据", orderList); ```