依賴配置 (Maven pom.xml)
<dependencies><!-- FastExcel 核心庫 --><dependency><groupId>cn.idev.excel</groupId><artifactId>fastexcel</artifactId><version>1.0.0</version></dependency><!-- Apache POI 依賴 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency>
</dependencies>
模版文件路徑以及表頭
?
導出映射實體類?DishAppManagementOriginalVo
package com.fantaibao.module.vo.appDish;import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.annotation.write.style.ColumnWidth;
import cn.idev.excel.annotation.write.style.HeadFontStyle;
import cn.idev.excel.annotation.write.style.HeadStyle;
import cn.idev.excel.enums.BooleanEnum;
import cn.idev.excel.enums.poi.FillPatternTypeEnum;
import com.fantaibao.module.po.DishAppManagementOriginal;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.math.BigDecimal;
import java.util.Date;@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ExcelIgnoreUnannotated
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 22)
@HeadFontStyle(fontName = "Microsoft YaHei", fontHeightInPoints = 11, bold = BooleanEnum.TRUE)
public class DishAppManagementOriginalVo {/*** 標準菜品名稱*/@ColumnWidth(30)@ExcelProperty({"關聯標準菜品數據","標準菜品名稱"})private String menuName;/*** 標準菜品名稱*/@ColumnWidth(20)@ExcelProperty({"關聯標準菜品數據","標準單位"})private String menuUnit;/*** 菜品名稱*/@ColumnWidth(30)@ExcelProperty({"收銀平臺原始數據","菜品名稱"})private String originalName;/*** 菜品編碼*/@ColumnWidth(30)@ExcelProperty({"收銀平臺原始數據","菜品編碼"})private String originalCode;/*** 菜品類型(1-單點 2-套餐)*/@ColumnWidth(20)@ExcelProperty({"收銀平臺原始數據","菜品類型"})private String dishTypeStr;/*** 菜品分類*/@ColumnWidth(20)@ExcelProperty({"收銀平臺原始數據","菜品分類"})private String originalType;/*** 菜品平均定價(元保留兩位小數)*/@ColumnWidth(15)@ExcelProperty({"收銀平臺原始數據","定價"})private BigDecimal avgPrice;/*** 菜品單位(十個字符)*/@ColumnWidth(20)@ExcelProperty({"收銀平臺原始數據","單位"})private String unit;}
文件處理工具類CustomFileUtil
@Component
public class CustomFileUtil {public File getFile(String filePath) {try {String tmpPath = System.getProperty("java.io.tmpdir") + filePath.substring(1);File file = new File(tmpPath);InputStream inputStream = this.getClass().getResourceAsStream(filePath);if (null == inputStream) {throw new Exception("文件讀取失敗");}FileUtils.copyInputStreamToFile(inputStream, file);inputStream.close();return file;} catch (Exception e) {System.out.println(e.getMessage());return null;}}
}
?
業務層調用
@Resourceprivate CustomFileUtil customFileUtil;@Overridepublic void export(Integer type, HttpServletResponse response) throws IOException {//設置導出文件格式response.setHeader("Content-Type", "application/vnd.ms-excel");//設置導出文件名稱response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("收銀平臺原始菜品數據.xlsx", StandardCharsets.UTF_8));//獲取模板靜態資源try (ExcelWriter excelWriter = FastExcel.write(response.getOutputStream()).withTemplate(customFileUtil.getFile("/template/original-dish-data.xlsx")).build()) {//獲取模板的sheet頁WriteSheet sheet1 = EasyExcel.writerSheet(1, "原始菜品信息").build();//獲取導出數據源列表List<DishAppManagementOriginalVo> dishAppManagementOriginalVos = pageList(new Page(1, 10000), DishAppManagementOriginalListDto.builder().status(type).build()).getRecords();//使用 EasyExcel 進行數據填充excelWriter.write(dishAppManagementOriginalVos, sheet1);excelWriter.finish();}}