自定義工具,可以通過獲取上一行行高設置后面所以行的高度
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;}@Overridepublic void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Integer integer, Integer integer1, Boolean aBoolean) {}@Overridepublic void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {row.setHeight((short)rowHeight);}@Overridepublic 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;}