【使用EasyExcel导出excel】
使用EasyExcel导出excel文件
·
前言
需求:客户提出导出excel统计数据,使用EasyExcel导出比较便捷,导出大量数据时有优势,并且耗费内存较少。
一、EasyExcel是什么?
EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。
他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能(来自官网)。
更多更详细的使用请访问:官方代码示例(Gitee)
二、EasyExcel使用
1.简单的导出EasyExcel
- 使用类导出非常方便,只需要使用@ExcelProperty注解即可,注解的值就是表头
代码如下(示例):
@Getter
@Setter
@EqualsAndHashCode
@ToString
@Builder
public class ExcelExportDTO {
/**
* 序号
*/
@ExcelProperty("序号")
private String index;
/**
* 最高温
*/
@ExcelProperty("最高温")
private String maxTemp;
/**
* 最低温
*/
@ExcelProperty("最低温")
private String minTemp;
// ...
}
public ReportDownDto exportWorksheetReport(Long id){
String savePath = "E:/test/测试导出excel.xlsx";
String sheetName = "测试导出excel";
EasyExcel.write(savePath, ExcelExportDTO.class).sheet(sheetName).doWrite(this.exportAnalyseResult(id));
}
/**
* 导出excel
*/
public List<ExcelExportDTO> exportAnalyseResult(Long id){
// 获取导出数据
}
2.单独设置样式
- 设置表头和内容
public ReportDownDto exportWorksheetReport(Long id){
String savePath = "E:/test/测试导出excel.xlsx";
String sheetName = "测试导出excel";
//表头内容策略
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
//设置头居中
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置背景色
headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.index);
//设置内容
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
//设置 水平居中
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置表头和内容
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
// 这里需要指定写用哪个class去写,然后写到第一个sheet,名字为sheetName 然后文件流会自动关闭
EasyExcel.write(savePath, ExcelExportDTO.class).sheet(sheetName)
.registerWriteHandler(horizontalCellStyleStrategy)
.doWrite(this.exportAnalyseResult(id));
}
- 设置所有表格样式:宽度根据内容自适应
public class AutoWidthHandlerUtil extends AbstractColumnWidthStyleStrategy {
@Override
public void setColumnWidth(WriteSheetHolder writeSheetHolder, List<WriteCellData<?>> cellDataList,
Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
// 计算是否需要设置列宽。仅在处理表头行或第一行数据时设置列宽。
boolean needSetWidth = relativeRowIndex != null && (isHead || relativeRowIndex == 0);
if (needSetWidth) {
// 获取当前sheet
Sheet sheet = writeSheetHolder.getSheet();
// 获取当前列的宽度(单位是1/256个字符宽度)
int columnWidth = sheet.getColumnWidth(cell.getColumnIndex());
// 获取单元格内容的字节长度
int length = cell.getStringCellValue().getBytes().length;
// 计算新的列宽,长度乘以256,因为列宽度单位是1/256个字符宽度
columnWidth = Math.max(columnWidth, length * 256);
// 设置最小宽度,防止过窄
columnWidth = Math.max(columnWidth, 256 * 10);
sheet.setColumnWidth(cell.getColumnIndex(), columnWidth);
}
}
}
public ReportDownDto exportWorksheetReport(Long id){
String savePath = "E:/test/测试导出excel.xlsx";
String sheetName = "测试导出excel";
//表头内容策略
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
//设置头居中
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置背景色
headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.index);
//设置内容
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
//设置 水平居中
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置表头和内容
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
// 这里需要指定写用哪个class去写,然后写到第一个sheet,名字为sheetName 然后文件流会自动关闭
EasyExcel.write(savePath, ExcelExportDTO.class).sheet(sheetName)
.registerWriteHandler(horizontalCellStyleStrategy)
.registerWriteHandler(new AutoWidthHandlerUtil())
.doWrite(this.exportAnalyseResult(id));
}
总结
目前满足客户要求仅仅就是基本导出,对于样式没有特殊的要求,后续有需求再更新
更多推荐


所有评论(0)