商品导出

This commit is contained in:
gong
2026-01-29 09:42:50 +08:00
parent 66d3c8ad0b
commit 2d15315b79
6 changed files with 354 additions and 33 deletions

View File

@@ -3,6 +3,8 @@ package com.czg.excel;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
@@ -244,4 +246,58 @@ public class ExcelExportUtil {
}
return count;
}
/**
* 带合并单元格的商品导出到Response
*
* @param data 数据列表
* @param fileName 文件名
* @param response HttpServletResponse
* @param <T> 数据类型
*/
public static <T> void exportProductWithMergeToResponse(List<T> data, Class<T> clazz,
String fileName,
HttpServletResponse response, List<SheetWriteHandler> handlers) {
if (data == null) {
data = Collections.emptyList();
}
setResponseHeader(response, fileName, DEFAULT_CONFIG);
try (OutputStream outputStream = response.getOutputStream()) {
// 创建样式策略 - 设置表头和内容都居中
WriteCellStyle headStyle = new WriteCellStyle();
headStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
WriteCellStyle contentStyle = new WriteCellStyle();
contentStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
HorizontalCellStyleStrategy styleStrategy = new HorizontalCellStyleStrategy(headStyle, contentStyle);
// 创建写入器 - 必须指定clazz
ExcelWriterBuilder builder = EasyExcel.write(outputStream, clazz)
.autoCloseStream(true)
.registerConverter(new LocalTimeConverter())
.registerWriteHandler(styleStrategy);
if (handlers != null && !handlers.isEmpty()) {
for (SheetWriteHandler h : handlers) {
builder.registerWriteHandler(h);
}
}
ExcelWriter excelWriter = builder.build();
WriteSheet writeSheet = EasyExcel.writerSheet(DEFAULT_CONFIG.getDefaultSheetName()).build();
excelWriter.write(data, writeSheet);
excelWriter.finish();
log.info("带合并单元格的商品Excel导出成功文件名{},数据量:{}", fileName, data.size());
} catch (IOException e) {
log.error("带合并单元格的商品Excel导出失败", e);
throw new CzgException("Excel导出失败", e);
}
}
}

View File

@@ -0,0 +1,47 @@
package com.czg.excel;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
/**
* @author yjjie
* @date 2026/1/28 16:16
*/
public class LocalTimeConverter implements Converter<LocalTime> {
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");
@Override
public Class<LocalTime> supportJavaTypeKey() {
return LocalTime.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public LocalTime convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
String stringValue = cellData.getStringValue();
if (stringValue == null || stringValue.trim().isEmpty()) {
return null;
}
return LocalTime.parse(stringValue, FORMATTER);
}
@Override
public WriteCellData<?> convertToExcelData(LocalTime value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
if (value == null) {
return new WriteCellData<>("");
}
return new WriteCellData<>(value.format(FORMATTER));
}
}