EasyExcel如何控制输出行为

1. 控制输出流的关闭

当你使用 OutputStream 作为输出时,可以通过 autoCloseStream 参数来控制 EasyExcel 是否自动关闭输出流。默认情况下,autoCloseStream 为 false,即 EasyExcel 不会自动关闭输出流。如果设置为 true,EasyExcel 会在写入操作结束后自动关闭输出流。这在大多数情况下可以简化资源管理,减少忘记手动关闭流可能导致的资源泄露问题。

示例代码如下:

EasyExcel.write(outputStream, YourModel.class)
.autoCloseStream(false) // 或 true,根据需求设定
.sheet(“Sheet1”)
.doWrite(dataList);

2. 选择导出的列

可以通过 excludeColumnFiledNames 和 includeColumnFiledNames 方法来控制哪些列参与导出。例如,忽略某些列不导出,或者只导出指定的列。
示例代码如下:

// 忽略 date 列不导出
Set excludeColumnFiledNames = new HashSet<>();
excludeColumnFiledNames.add(“date”);
EasyExcel.write(fileName, DemoData.class)
.excludeColumnFiledNames(excludeColumnFiledNames)
.sheet(“忽略date”)
.doWrite(data());

// 只导出 date 列
Set includeColumnFiledNames = new HashSet<>();
includeColumnFiledNames.add(“date”);
EasyExcel.write(fileName, DemoData.class)
.includeColumnFiledNames(includeColumnFiledNames)
.sheet(“导出date”)
.doWrite(data());

3. 控制数字的输出格式

可以通过设置 DataFormat 或 CustomCellWriter 来控制数字的输出格式。例如,可以使用 @ExcelProperty 注解的 format 属性来指定数字的格式。
示例代码如下:

public class DemoData {
@ExcelProperty(value = “数字标题”, format = “0.00”)
private Double doubleData;
// getting setting
}

4. 使用自定义的写处理器

可以通过实现 WriteHandler 接口来自定义写入行为。例如,可以自定义单元格的样式、合并单元格等。

示例代码如下:

public class CustomWriteHandler implements WriteHandler {
@Override
public void sheet(int sheetNo, Sheet sheet) {
// 自定义 Sheet 的行为
}

@Override
public void row(int sheetNo, int sheetIndex, Row row) {
    // 自定义 Row 的行为
}

@Override
public void cell(int sheetNo, int sheetIndex, Cell cell) {
    // 自定义 Cell 的行为
}

}

EasyExcel.write(fileName, DemoData.class)
.registerWriteHandler(new CustomWriteHandler())
.sheet(“模板”)
.doWrite(data());

5. 控制输出文件的类型

可以通过 excelType 参数来指定输出文件的类型,例如 .xlsx 或 .xls。
示例代码如下:

EasyExcel.write(fileName, DemoData.class)
.excelType(ExcelTypeEnum.XLS)
.sheet(“模板”)
.doWrite(data());
通过以上方法,你可以灵活地控制 EasyExcel 的输出行为,以满足不同的业务需求。

### 使用EasyExcel进行多个表格或数据集的合并导出 在Java应用中,使用阿里云开发EasyExcel库能够极大地简化处理Excel文件的过程。对于涉及复杂结构的数据集合,特别是当存在多层级嵌套或是需要跨不同工作表间共享相同部分的信息时,可以通过定义特定的`WriteHandler`来控制单元格的行为,比如合并单元格。 #### 初始化写入器与设置输出流 为了开始编写Excel文档,首先需创建一个写入器实例,并将其绑定到HTTP响应的输出流上: ```java OutputStream out = response.getOutputStream(); // 设置响应头信息以便浏览器识别下载行为 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("example", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); // 创建一个新的ExcelWriter对象准备向其写入数据 EasyExcel.write(out, WilliamAllExportVo.class).build(); ``` 此段代码片段展示了如何配置HTTP响应以触发客户端保存对话框,并指定了要使用的实体类作为模板[^1]。 #### 注册自定义合并策略 针对希望合并显示的内容区域,可通过实现`HorizontalMergeStrategy`接口来自定义逻辑。下面的例子说明了怎样为每一列设定不同的合并规则: ```java public class CustomMergeStrategy implements HorizontalMergeStrategy { @Override public boolean merge(int rowAccessIndex, List<CellData> cellDataList) { // 实现具体的合并条件判断算法... return true; } } // 将上述策略应用于writer中 easyExcelWriter.addMergeStrategy(new CustomMergeStrategy()); ``` 这段代码实现了水平方向上的单元格合并功能,可以根据实际需求调整内部的具体业务逻辑。 #### 数据平铺与自动合并 考虑到某些场景下原始数据可能具有复杂的层次关系(如一对多关联),此时可借助于注解机制让EasyExcel帮助我们完成这些繁琐的任务。具体来说,在VO模型里标注好哪些属性应该被展开成独立行项的同时还要记住它们之间的父子级联路径;之后框架会依据预设好的映射规则自动化地执行相应的转换过程并妥善安排好相邻重复值间的跨越范围[^4]。 ```java @HeadRowHeight(20) @ColumnWidth(25) @Data class ParentChildModel { private String parentField; @ColumnIgnore private Child child; @ConditionalIgnore(ignoreConditionClass = IgnoreIfParentSame.class) private String getChildName() {return this.child.getName();} } ``` 这里展示了一个简单的父-子型模式下的示例,其中包含了忽略条件的应用方式,使得只有当父节点发生变化时才会重新渲染对应的子元素名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值