导出工具类
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import lombok.Cleanup;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.net.URLEncoder;
import java.util.List;
@Slf4j
public class ExportExcelUtil<T> {
public static <T> void export(HttpServletResponse response, List<T> listParam, Class<T> classParam, String sheetName) {
try {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode(sheetName, "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
@Cleanup("finish") ExcelWriter writer = EasyExcel
.write(new BufferedOutputStream(response.getOutputStream()), classParam)
.autoCloseStream(Boolean.TRUE)
.excelType(ExcelTypeEnum.XLSX)
.needHead(Boolean.TRUE)
.build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
writeSheet.setSheetNo(1);
writeSheet.setSheetName(sheetName);
writer.write(listParam, writeSheet);
writer.finish();
} catch (Exception e) {
log.error("ExportExcelUtil 导出excel 异常:" + e);
}
}
}
导出实体定义
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@ExcelIgnoreUnannotated
public class 导出实体 {
@ExcelProperty(index = 0, value = "名称1")
@ApiModelProperty("xxxx")
private String xxxxx;
@ExcelProperty(index = 1, value = "名称2")
@ApiModelProperty("xxxx")
private String xxxx;
@ExcelProperty(index = 2, value = "名称3")
@ApiModelProperty("xxxx")
private String xxxx;
}
service 层
void 方法名(HttpServletResponse response, 查询条件实体);
serviceImpl 层
@Override
public void 方法名(HttpServletResponse response, 查询条件实体) {
List<返回实体> 集合名字 = Mapper.xxxxx(查询条件实体);
ExportExcelUtil.export(response, 集合, 返回实体.class, "表格名称");
}