vue easyexcel 匯出excel post請求接引數
阿新 • • 發佈:2022-04-21
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.0.5</version> </dependency>
controller
@PostMapping("/list/export") public void exportProductionStopList( @RequestBody(required= false) ProductionStopInfoDTO productionStopInfoDTO, HttpServletResponse response) throws Exception { try { productionStopService.exportProductionStopList(productionStopInfoDTO, response); }catch (Exception e){ logger.error("匯出失敗", e); // 重置responseresponse.reset(); response.setContentType("application/json"); response.setCharacterEncoding("utf-8"); Map<String, String> map = MapUtils.newHashMap(); map.put("status", "failure"); map.put("message", "下載檔案失敗" + e.getMessage()); response.getWriter().println(JSON.toJSONString(map)); } }
service
@Override public void exportProductionStopList(ProductionStopInfoDTO productionStopInfoDTO, HttpServletResponse response) throws Exception {
//查詢條件 QueryWrapper<Object> wrapper = getObjectQueryWrapper(productionStopInfoDTO); ArrayList<ProductionStopListVO> pageList = productionStopInfoMapper.queryProductionStopList(wrapper); //+ DateUtil.getCurrentDateStr("yyyyMMddHHmmss") setExcelRespProp(response, "某個列表"); pageList.stream().map(v -> { ProductionStopListVO productionStopListVO = (ProductionStopListVO) v; productionStopListVO.setStatusName(ProductionStopStatusEnum.getProductionStopStatus(productionStopListVO.getStatus())); return productionStopListVO; }).collect(Collectors.toList()); EasyExcel.write(response.getOutputStream(),ProductionStopListVO.class) .sheet("sheet1") .doWrite(pageList); } /** * 設定excel下載響應頭屬性 */ private void setExcelRespProp(HttpServletResponse response, String rawFileName) throws UnsupportedEncodingException { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode(rawFileName, "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); }
model
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.qm.be.util.excel.LocalDateStringConverter;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
@Data @HeadRowHeight(20) public class ProductionStopListVO { /** * id */ @ExcelIgnore private String id; /** * 生產關閉編號 */ @ExcelProperty("生產關閉編號") @ColumnWidth(25) private String productionStopNo; /** * 產品類別 */ @ExcelProperty("產品類別") private String productCategory; /** * 產品家族 */ @ExcelProperty("產品家族") @ColumnWidth(15) private String productionFamily; /** * 負責人 */ @ExcelProperty("負責人") @ColumnWidth(15) private String ownerName; /** * 申請日期 */ @ExcelProperty(value ="申請日期" ,converter = LocalDateStringConverter.class) @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern="yyyy-MM-dd") @ColumnWidth(15) private LocalDate createTime; /** * 狀態名稱 */ @ExcelProperty("狀態") private String statusName; /** * 狀態 */ @ExcelIgnore private Integer status; /** * 故障描述 */ @ExcelProperty("故障描述") @ColumnWidth(25) private String failureDescription; }
自定義時間轉換
package com.qm.be.util.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.LocalDate; import java.time.format.DateTimeFormatter; public class LocalDateStringConverter implements Converter<LocalDate> { @Override public Class<?> supportJavaTypeKey() { return LocalDate.class; } @Override public CellDataTypeEnum supportExcelTypeKey() { return CellDataTypeEnum.STRING; } @Override public LocalDate convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { return LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd")); } @Override public WriteCellData<?> convertToExcelData(LocalDate value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String format = formatter.format(value); return new WriteCellData(format); } }
package com.qm.be.util.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.LocalDateTime; import java.time.format.DateTimeFormatter; public class LocalDateTimeStringConverter implements Converter<LocalDateTime> { @Override public Class<?> supportJavaTypeKey() { return LocalDateTime.class; } @Override public CellDataTypeEnum supportExcelTypeKey() { return CellDataTypeEnum.STRING; } @Override public LocalDateTime convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); } @Override public WriteCellData<?> convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String format = formatter.format(value); return new WriteCellData(format); } }
vue
const requestExportList = (url, data) => { return new Promise((resolve, reject) => { axios.post(url, data, { responseType: "blob" }).then( res => { // debugger; const link = document.createElement("a"); const blob = new Blob([res.data], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }); link.style.display = "none"; link.href = URL.createObjectURL(blob); link.download = "某個列表.xlsx"; document.body.appendChild(link); link.click(); document.body.removeChild(link); resolve(); }, err => { reject(err); } ); }); }; const exportList = async () => { let createTimeStart = ""; let createTimeEnd = ""; // debugger; if (pageParams.timeline == null) { pageParams.timeline = []; } if (pageParams.timeline.length > 0) { createTimeStart = pageParams.timeline[0]; createTimeEnd = pageParams.timeline[1]; } // let res = await exportProductionStopList({}); // debugger; let rLoading = openLoading(); await requestExportList("/介面/list/export", { createTimeStart: createTimeStart, createTimeEnd: createTimeEnd, status: pageParams.status != "" ? parseInt(pageParams.status) : "", productFamily: pageParams.productFamily }) .then(res => {}) .finally(() => { rLoading.close(); }); // debugger; };