前言(很重要):
导出场景:这里使用了固定表头+动态表头,固定表头通过自定义注解进行关联,动态表头通过数据判断匹配关联,没有填空。
使用的是easyexcel写的基础动态excel导出,表头无实体类,纯手写,具备简单的样式设置,很多代码都是从网上查询借鉴和借用的,感谢网上大佬的馈赠!
当然,数据还是需要实体类的,一方面是正常的数据查询,一方面是是将数据和表头进行绑定。这里使用的是表头数量多于数据数量的场景,就是可能存在有的列下面为空,所以需要进行数据判断,此方面可根据需求自行增减。
再次感谢网络上各位大佬的馈赠!
正文
先看结果

所需依赖
后三个需要保持版本号一致,随意使用会出现问题,hutool属于另外一个使用依赖了,可加可不加
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.10</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
代码部分
数据实体类,这里的注解用的都是lombok,@HeaderName为自定义注解
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author pomelo
* @since 2024/5/29
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TestEntity {
@HeaderName("名称")
private String entityName;
@HeaderName("编码")
private String entityCode;
@HeaderName("类型")
private String entityType;
}
自定义注解,该注解的主要作用就是将数据属性和表头先进行绑定
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface HeaderName {
String value() default "";
}
方法调用
@GetMapping("/demoTestExport")
@ApiOperation("数据导出")
public void demoTestExport(HttpServletResponse response) throws IOException {
// 你需要导出的数据
List<TestEntity> dataList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
dataList.add(TestEntity.builder().entityCode("编码"+i).entityName("名称"+i).entityType("类型"+i).build());
}
// 没有在实体类中绑定的消息头
List<String> headerList = new ArrayList<>();
headerList.add("名称1");
headerList.add("名称2");
headerList.add("名称3");
headerList.add("名称4");
headerList.add("名称5");
// 动态消息头,有的在实体类中,有的不在
String defenseJson = "名称,编码,类型,节点,数量";
// 数据使用
DynamicExportTestUtils.exportExcelTest(response, dataList, headerList, "测试导出", defenseJson);
}
动态导出类
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.htt
本文介绍了如何使用easyExcel在Java和Spring Boot中动态生成带有固定和动态表头的Excel文件,并展示了如何设置自动列宽和样式。通过自定义注解关联数据和表头,同时处理数据不足时的空列情况。文中还提供了关键代码示例,包括数据实体类、动态导出类、列宽和标题样式设置。最后,作者强调这仅为基础版本,可按需进行调整和扩展。
最低0.47元/天 解锁文章
8189

被折叠的 条评论
为什么被折叠?



