1.controller
@Resource
private ExcelExportHandler excelExportHandler;
/*** easypoi导出功能*/@ApiOperation(value = "excel导出")@PostMapping("/exportExcel")public void export(@RequestBody BaseMaterialDto baseMaterialDto,HttpServletResponse response) throws IOException {QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.like("name", baseMaterialDto.getName());queryWrapper.like("code", baseMaterialDto.getCode());queryWrapper.like("storage_room", baseMaterialDto.getStorageRoom());List baseMaterials = baseMaterialMapper.selectList(queryWrapper);List data = new ArrayList<>();for (int i = 0; i < baseMaterials.size(); i++) {MaterialExcelData excelData = new MaterialExcelData();excelData.setCode(baseMaterials.get(i).getCode());excelData.setName(baseMaterials.get(i).getName());excelData.setStorageRoom(baseMaterials.get(i).getStorageRoom());excelData.setType(baseMaterials.get(i).getType());excelData.setVolume(baseMaterials.get(i).getVolume());excelData.setUnit(baseMaterials.get(i).getUnit());excelData.setWeight(baseMaterials.get(i).getWeight());data.add(excelData);}excelExportHandler.export(response, "基础数据物料", data, MaterialExcelData.class);}
}
2.ExcelExportHandler工具类import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;/*** 将数据以Excel的格式写入输出流* EasyExcel参考文档:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write**/
@Slf4j
@Component
public class ExcelExportHandler {/*** 下载Excel格式的数据** @param response response* @param fileName 文件名(支持中文)* @param data 待下载的数据* @param clazz 封装数据的POJO* @param 数据泛型*/public void export(HttpServletResponse response, String fileName,List data, Class clazz) {try {response.setHeader("content-Type", "application/vnd.ms-excel");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename*=" + encodedFileName + ".xlsx");// 这里需要设置不关闭流EasyExcel.write(response.getOutputStream(), clazz).sheet("Sheet1")// 设置单元格宽度自适应.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())// 设置单元格高度和字体.registerWriteHandler(getHeightAndFontStrategy()).doWrite(data);log.info("下载{}条记录到文件{}", data.size(), fileName);} catch (Exception e) {// 重置responselog.error("文件下载失败" + e.getMessage());throw new RuntimeException("下载文件失败", e);}}/*** 自定义Excel导出策略,设置表头和数据行的字体和高度** @return Excel导出策略*/private HorizontalCellStyleStrategy getHeightAndFontStrategy() {WriteCellStyle headWriteCellStyle = new WriteCellStyle();WriteFont headWriteFont = new WriteFont();headWriteFont.setFontHeightInPoints((short) 11);headWriteFont.setBold(true);headWriteCellStyle.setWriteFont(headWriteFont);WriteCellStyle contentWriteCellStyle = new WriteCellStyle();WriteFont contentWriteFont = new WriteFont();contentWriteFont.setFontHeightInPoints((short) 11);contentWriteCellStyle.setWriteFont(contentWriteFont);contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);}
}
3.pom.xml
com.alibabaeasyexcel2.1.1
org.apache.poipoi3.17
org.apache.poipoi-ooxml3.17
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!