java使用easyexcel导出文件,自定义样式

本文详细讲解了一个Java实体类OutAluminumTaskExcel在Excel文件中的应用,涉及数据列配置、单元格样式设置以及导出过程中的特殊处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实体类

package com.control.domain.vo;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.*;
import com.alibaba.excel.enums.BooleanEnum;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;

import java.util.Date;

/**
 * 描述 : TODO<br/>
 * 作者 : <br/>
 * 时间 : 2023-12-21 9:00:41<br/>
 */
@Data
@EqualsAndHashCode
@HeadStyle
@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, borderTop = BorderStyleEnum.THIN,
		borderBottom = BorderStyleEnum.THIN, borderLeft = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
@ContentFontStyle(fontHeightInPoints = 12)
@ContentRowHeight(30)
@HeadRowHeight(30)
public class OutAluminumTaskExcel {

	@ColumnWidth(value = 7)
	@ExcelProperty({ "偏差统计及任务列表", "偏差统计及任务列表", "报告时间", "序号" })
	private Integer id;

	@ColumnWidth(value = 20)
	@ExcelProperty({ "偏差统计及任务列表", "偏差统计及任务列表", "报告时间", "单位" })
	private String pApartment;

	@ColumnWidth(value = 15)
	@ExcelProperty({ "偏差统计及任务列表", "偏差统计及任务列表", "", "槽号" })
	private String slotNo;

	/**
	 * 实际出铝量
	 */
	@ColumnWidth(value = 15)
	@ExcelProperty({ "偏差统计及任务列表", "偏差统计及任务列表", "", "任务量(kg)" })
	private String realOutAluminumWeight;

	/**
	 * 计划出铝量
	 */
	@ColumnWidth(value = 15)
	@ExcelProperty({ "偏差统计及任务列表", "偏差统计及任务列表", "", "实出量(kg)" })
	private String planOutAluminumWeight;

	@ColumnWidth(value = 20)
	@ExcelProperty({ "偏差统计及任务列表", "偏差统计及任务列表", "出铝日期", "出铝偏差(kg)" })
	private String diffOutAluminumWeight;

	@ColumnWidth(value = 15)
	@ExcelProperty({ "偏差统计及任务列表", "偏差统计及任务列表", "", "偏差等级" })
	private String taskLevel;

	@ColumnWidth(value = 15)
	@ExcelProperty({ "偏差统计及任务列表", "偏差统计及任务列表", "", "任务类型" })
	private String taskName;

	@ColumnWidth(value = 10)
	@ExcelProperty({ "偏差统计及任务列表", "偏差统计及任务列表", "", "责任人" })
	private String taskSendPerson;

	@ColumnWidth(value = 22)
	@ExcelProperty({ "偏差统计及任务列表", "偏差统计及任务列表", "", "任务发出时间" })
	private Date createTime;

	@ExcelProperty({ "偏差统计及任务列表", "偏差统计及任务列表", "", "建议" })
	@ColumnWidth(value = 150)
	@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.LEFT)
	private String opinionNote;

}

测试类中的测试方法

@Disabled
	@DisplayName("excel绘制")
	@Test
	public void exportExcel() throws IOException {
		// pOutAluminumTasksController.exportExcel(null);
		String path = "C:\\Users\\xxx\\Desktop\\";
		String fileName = path + "偏差统计及任务列表" + ".xlsx";
		List<OutAluminumTaskExcel> outAluminumTask = pTaskMapper.getOutAluminumTask(DateUtil.beginOfDay(new Date()));
		// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
		EasyExcel.write(fileName, OutAluminumTaskExcel.class).registerWriteHandler(new CellWriteHandler() {
			@Override
			public void afterCellDispose(CellWriteHandlerContext context) {
				if (context.getRowIndex() == 0) {
					if (context.getColumnIndex() == 0) {
						Workbook workbook = context.getWriteWorkbookHolder().getWorkbook();
						Font font = workbook.createFont();
						font.setFontHeightInPoints((short) 32);
						font.setColor(Font.COLOR_RED);
						font.setFontName("宋体");
						CellStyle cellStyle = workbook.createCellStyle();
						cellStyle.setFillBackgroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
						// cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
						cellStyle.setFont(font);
						cellStyle.setAlignment(HorizontalAlignment.CENTER);
						cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
						context.getCell().setCellStyle(cellStyle);
						context.getFirstCellData().setWriteCellStyle(null);
					}
				}
				else if (context.getRowIndex() == 2) {
					if (context.getColumnIndex() == 2) {
						context.getCell().setCellValue(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm"));
					}
					else if (context.getColumnIndex() == 6) {
						context.getCell().setCellValue(DateUtil.format(new Date(), "yyyy年MM月dd日"));
					}
				}

			}
		}).sheet("偏差统计及任务列表").doWrite(outAluminumTask);
	}

效果图
在这里插入图片描述

### 使用 EasyExcel 实现导出自定义表头 为了实现在 EasyExcel导出带有自定义表头的数据文件,可以按照以下方法操作: #### 1. 准备依赖项 确保项目中已经引入了 EasyExcel 的 Maven 或 Gradle 依赖。 对于 Maven 用户,在 `pom.xml` 文件中添加如下配置: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>最新版本号</version> </dependency> ``` #### 2. 创建数据模型类 创建用于存储实际业务逻辑中的对象属性映射到 Excel 列上的 Java 类。如果要设置特定列作为表头,则可以在该类上标注相应的注解来指定显示名称和其他样式信息[^3]。 例如,假设有一个简单的员工信息列表需要被写入 Excel 文件中,那么对应的 POJO 可能看起来像这样: ```java @Data public class Employee { /** * 姓名字段对应于 Excel 表格的第一列,并且会自动成为默认的表头文字。 */ @ExcelProperty(value = "姓名", index = 0) private String name; /** 邮箱地址 */ @ExcelProperty("邮箱") private String email; } ``` #### 3. 构建并填充数据集合 准备好待写出的数据集合作为参数传递给 EasyExcel 工具类来进行批量处理前的操作。 #### 4. 编写导出服务端代码片段 下面是一个完整的例子展示如何利用上述提到的功能完成一次基本但又灵活可控的导出过程: ```java import com.alibaba.excel.EasyExcel; import java.util.ArrayList; import java.util.List; // ...其他必要的包导入语句... /** * 这里我们模拟了一个简单场景下的导出功能实现方式, */ public void exportEmployeeList(String filePath, List<Employee> employeeList){ // 设置输出路径以及模板样式等全局选项... WriteSheet writeSheet = EasyExcel.writerFile(filePath).buildWriteSheet(); try (EasyExcel.Writer writer = new EasyExcel.Writer(writeSheet)){ // 将准备好的数据源传进去即可触发真正的IO流动作啦~ writer.write(employeeList); // 如果想要进一步定制化外观效果的话还可以继续追加更多个性化设定哦!比如修改字体大小、背景色之类的视觉特性都可以通过额外的方式去达成目标。 Style style = new CellStyleStrategy(); // 自定义单元格风格策略 HeaderCellStyle headerCellStyle = new HeaderCellStyle(style); // 应用至整个头部区域内的所有单元格之上 writer.setHeaderCellStyle(headerCellStyle); FooterCellStyle footerCellStyle = new FooterCellStyle(style); // 同理适用于底部页脚部分 writer.setFooterCellStyle(footerCellStyle); } } class HeaderCellStyle implements CellStyleStrategy { private final CellStyle cellStyle; public HeaderCellStyle(CellStyle cellStyle) { this.cellStyle = cellStyle; } @Override public void apply(Object object, int rowIndex, int columnIndex, Sheet sheet, Row row, Cell cell) { if (rowIndex == 0 && columnIndex >= 0) { // 对应首行即标题栏位置应用特殊格式化规则 cell.setCellStyle(cellStyle.createHeaderStyle()); } } } ``` 此段程序展示了怎样基于 EasyExcel API 设计一个较为通用的服务接口函数用来执行具体的文件生成任务;其中特别注意到了有关于“表头”的一些细节控制手段——既可以通过继承抽象基类 `CellStyleStrategy` 并重载其成员方法来自由调整任意一行内各元素的表现形式,也可以借助内置工具链快速搭建起满足日常需求的基础框架结构[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值