diff --git a/pom.xml b/pom.xml
index d018fac6e457a1ec2c53966d0704c47042cd340d..aea2df30be2aaf1244e22a89408a37982fd9cec3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -181,6 +181,12 @@
mapstruct
${mapstruct.version}
+
+
+ org.apache.poi
+ poi-ooxml
+ 4.1.2
+
diff --git a/src/main/java/com/kwan/springbootkwan/entity/ExcelData.java b/src/main/java/com/kwan/springbootkwan/entity/ExcelData.java
new file mode 100644
index 0000000000000000000000000000000000000000..d6d4b3cf3b77b4c14e3b7285344731338052fbdf
--- /dev/null
+++ b/src/main/java/com/kwan/springbootkwan/entity/ExcelData.java
@@ -0,0 +1,53 @@
+package com.kwan.springbootkwan.entity;
+
+import lombok.Data;
+
+/**
+ * excel实体类
+ *
+ * @author : qinyingjie
+ * @version : 2.2.0
+ * @date : 2023/8/14 14:59
+ */
+@Data
+public class ExcelData {
+ private String product_id;
+ private String productName;
+ private String categoryName2;
+ private String genderName;
+ private double productYearName;
+ private String seasonName;
+ private String colorName;
+ private String styleName;
+ private double avg_sal_price;
+ private double gross_margin;
+ private double total7_size_store_day;
+ private double discount;
+ private double sal_store_count;
+ private double day_7_sal_qty_store_rate_rank;
+ private double inv_store_qty;
+ private String ondesk_date;
+ private double inv_store_ratio;
+ private double avg_now_price;
+ private double all_store_num;
+ private double day_7_size_store_day_rank;
+ private double total_ondesk_day;
+ private double total_replenish_qty;
+ private double initial_order_qty;
+ private double arrive_qty;
+ private double sal_out_rate;
+ private double total_arrive_qty;
+ private double inv_out_qty;
+ private double total_sal_rank;
+ private double total_sal_qty;
+ private double inv_qty;
+ private double replenish_not_arrive_qty;
+ private String counter_date;
+ private double total_sal_amt;
+ private double total_discount;
+ private double sal_qty;
+ private double inv_store_count;
+ private double total_purchase_qty;
+ private double day_30_size_store_day_rank;
+ private double inv_sal_ratio;
+}
diff --git a/src/main/java/com/kwan/springbootkwan/utils/ExcelReader.java b/src/main/java/com/kwan/springbootkwan/utils/ExcelReader.java
new file mode 100644
index 0000000000000000000000000000000000000000..98a7acc293c5fde3c439fc7bd9b18c7694d228d1
--- /dev/null
+++ b/src/main/java/com/kwan/springbootkwan/utils/ExcelReader.java
@@ -0,0 +1,110 @@
+package com.kwan.springbootkwan.utils;
+
+import com.kwan.springbootkwan.entity.ExcelData;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Objects;
+
+
+/**
+ * 读取excel工具类
+ *
+ * @author : qinyingjie
+ * @version : 2.2.0
+ * @date : 2023/8/14 15:28
+ */
+public class ExcelReader {
+ public static List readExcel(String filePath) {
+ List dataList = new ArrayList<>();
+ try (FileInputStream fis = new FileInputStream(filePath);
+ Workbook workbook = new XSSFWorkbook(fis)) {
+ Sheet sheet = workbook.getSheetAt(0);
+ Iterator rowIterator = sheet.iterator();
+ // Skip the header row
+ if (rowIterator.hasNext()) {
+ rowIterator.next();
+ }
+ //忽略第二行
+ if (rowIterator.hasNext()) {
+ rowIterator.next();
+ }
+ while (rowIterator.hasNext()) {
+ Row row = rowIterator.next();
+ final ExcelData excelDataFromRow = createExcelDataFromRow(row);
+ if (Objects.nonNull(excelDataFromRow)) {
+ dataList.add(excelDataFromRow);
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return dataList;
+ }
+
+ private static ExcelData createExcelDataFromRow(Row row) {
+ ExcelData data = new ExcelData();
+ final Cell cell = row.getCell(0);
+ if (Objects.isNull(cell)) {
+ return null;
+ }
+ DecimalFormat decimalFormat = new DecimalFormat("0");
+ data.setProduct_id(decimalFormat.format(cell.getNumericCellValue()));
+ data.setProductName(row.getCell(1).getStringCellValue());
+ data.setCategoryName2(row.getCell(2).getStringCellValue());
+ data.setGenderName(row.getCell(3).getStringCellValue());
+ data.setProductYearName(row.getCell(4).getNumericCellValue());
+ data.setSeasonName(row.getCell(5).getStringCellValue());
+ data.setColorName(row.getCell(6).getStringCellValue());
+ data.setStyleName(row.getCell(7).getStringCellValue());
+ data.setAvg_sal_price(row.getCell(8).getNumericCellValue());
+ data.setGross_margin(row.getCell(9).getNumericCellValue());
+ data.setTotal7_size_store_day(row.getCell(10).getNumericCellValue());
+ data.setDiscount(row.getCell(11).getNumericCellValue());
+ data.setSal_store_count(row.getCell(12).getNumericCellValue());
+ data.setDay_7_sal_qty_store_rate_rank(row.getCell(13).getNumericCellValue());
+ data.setInv_store_qty(row.getCell(14).getNumericCellValue());
+ data.setOndesk_date(row.getCell(15).getStringCellValue());
+ data.setInv_store_ratio(row.getCell(16).getNumericCellValue());
+ data.setAvg_now_price(row.getCell(17).getNumericCellValue());
+ data.setAll_store_num(row.getCell(18).getNumericCellValue());
+ data.setDay_7_size_store_day_rank(row.getCell(19).getNumericCellValue());
+ data.setTotal_ondesk_day(row.getCell(20).getNumericCellValue());
+ data.setTotal_replenish_qty(row.getCell(21).getNumericCellValue());
+ data.setInitial_order_qty(row.getCell(22).getNumericCellValue());
+ data.setArrive_qty(row.getCell(23).getNumericCellValue());
+ data.setSal_out_rate(row.getCell(24).getNumericCellValue());
+ data.setTotal_arrive_qty(row.getCell(25).getNumericCellValue());
+ data.setInv_out_qty(row.getCell(26).getNumericCellValue());
+ data.setTotal_sal_rank(row.getCell(27).getNumericCellValue());
+ data.setTotal_sal_qty(row.getCell(28).getNumericCellValue());
+ data.setInv_qty(row.getCell(29).getNumericCellValue());
+ data.setReplenish_not_arrive_qty(row.getCell(30).getNumericCellValue());
+ data.setCounter_date(row.getCell(31).getStringCellValue());
+ data.setTotal_sal_amt(row.getCell(32).getNumericCellValue());
+ data.setTotal_discount(row.getCell(33).getNumericCellValue());
+ data.setSal_qty(row.getCell(34).getNumericCellValue());
+ data.setInv_store_count(row.getCell(35).getNumericCellValue());
+ data.setTotal_purchase_qty(row.getCell(36).getNumericCellValue());
+ data.setDay_30_size_store_day_rank(row.getCell(37).getNumericCellValue());
+ data.setInv_sal_ratio(row.getCell(38).getNumericCellValue());
+ return data;
+ }
+
+ public static void main(String[] args) {
+ String filePath = "/Users/qinyingjie/Downloads/商品运营助手_滴小R_样例数据_edited.xlsx";
+ List dataList = readExcel(filePath);
+ for (ExcelData data : dataList) {
+ System.out.println(data);
+ }
+ }
+}
\ No newline at end of file