自定义工具,可以通过获取上一行行高设置后面所以行的高度
package org.springblade.modules.api.utils;
import com.alibaba.excel.write.handler.RowWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.Row;
public class CustomRowHeightHandler implements RowWriteHandler {
private int rowHeight;
public CustomRowHeightHandler(int rowHeight) {
this.rowHeight = rowHeight;
}
@Override
public void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Integer integer, Integer integer1, Boolean aBoolean) {
}
@Override
public void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {
row.setHeight((short)rowHeight);
}
@Override
public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer integer, Boolean aBoolean) {
}
}
导出的代码
/**
* excel填充模版用
*
* @param response 响应
* @param templateFilePath 模版路径
* @param inputFileName 导出文件名
* @param List 数据列表
* @param map 单个对象
* @param sheetAt 第几个sheet
* @param row 获取第几行的高度
* @throws Exception
*/
public static void exportExcelByFillIn(HttpServletResponse response, String templateFilePath, String inputFileName,
List<?> List, Map<String, Object> map, Integer sheetAt, Integer row) throws Exception {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileNamePath = URLEncoder.encode(inputFileName, "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileNamePath + ".xlsx");
int rowHeight = getFourthRowHeightFromTemplate(templateFilePath, sheetAt, row);
InputStream is = getInputStream(templateFilePath);
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(is)
//从指定行后使设置行高
.registerWriteHandler(new CustomRowHeightHandler(rowHeight))
.excelType(ExcelTypeEnum.XLS)
.build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
// 填充列表数据
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
excelWriter.fill(List, fillConfig, writeSheet);
// 填充map中的变量
excelWriter.fill(map, writeSheet);
excelWriter.finish();
}
/**
* 获取上一行高度
*
* @param templateFilePath
* @param sheetAt
* @param row
* @return
* @throws Exception
*/
public static int getFourthRowHeightFromTemplate(String templateFilePath, Integer sheetAt, Integer row) throws Exception {
InputStream is = getInputStream(templateFilePath);
Workbook workbook = WorkbookFactory.create(is);
Sheet sheet = workbook.getSheetAt(sheetAt); // 第几个工作表
Row fourthRow = sheet.getRow(row); // 第几行(索引从0开始)
int rowHeight = fourthRow.getHeight();
workbook.close();
return rowHeight;
}
/**
* 获取流
*
* @param templateFilePath
* @return
* @throws Exception
*/
public static InputStream getInputStream(String templateFilePath) throws Exception {
ClassPathResource res = new ClassPathResource(templateFilePath);
InputStream is = res.getInputStream();
return is;
}