doum
2026-01-29 88f72df1efba56e731aac80de4d9f3b879cc85cf
server/services/src/main/java/com/doumee/core/annotation/excel/ExcelImporter.java
@@ -4,15 +4,13 @@
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFPictureData;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
@@ -42,7 +40,7 @@
     * 标题行号
     */
    private CellType changeType;
    private Map<String, XSSFPictureData> pictureList;
    /**
     * 构造函数
     * @param--path 导入文件,读取第一个工作表
@@ -146,12 +144,13 @@
    }
    public ExcelImporter(String fileName, InputStream in, int headerNum, int sheetIndex,CellType cellType)
        throws InvalidFormatException, IOException {
        ByteArrayOutputStream buffer = toByteArray(in);
        if (StringUtils.isBlank(fileName)){
            throw new RuntimeException("导入文档为空!");
        }else if(fileName.toLowerCase().endsWith("xls")){
            this.wb = new HSSFWorkbook(in);
            this.wb = new HSSFWorkbook(new ByteArrayInputStream(buffer.toByteArray()));
        }else if(fileName.toLowerCase().endsWith("xlsx")){
            this.wb = new XSSFWorkbook(in);
            this.wb = new XSSFWorkbook(new ByteArrayInputStream(buffer.toByteArray()));
        }else{
            throw new RuntimeException("文档格式不正确!");
        }
@@ -161,9 +160,27 @@
        this.sheet = this.wb.getSheetAt(sheetIndex);
        this.headerNum = headerNum;
        this.changeType = cellType;
        this.pictureList = ExcelPictureUtil.getExcelPictures(new ByteArrayInputStream(buffer.toByteArray()));
        log.debug("Initialize success.");
    }
    public static ByteArrayOutputStream toByteArray(InputStream inputStream) {
        try {
            // 缓存文件流
            ByteArrayOutputStream buffer = new ByteArrayOutputStream();
            byte[] data = new byte[1024];
            int nRead;
            while ((nRead = inputStream.read(data, 0, data.length))!= -1) {
                buffer.write(data, 0, nRead);
            }
            buffer.flush();
           return  buffer;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
@@ -227,6 +244,9 @@
            return val;
        }
        return val;
    }
    public Map<String,XSSFPictureData> getExcelPictures(){
        return this.pictureList;
    }
    /**
@@ -352,6 +372,7 @@
                                    "fieldtype."+valType.getSimpleName()+"Type")).getMethod("getValue", String.class).invoke(null, val.toString());
                            }
                        }
                    } catch (Exception ex) {
                        log.info("Get cell value ["+i+","+column+"] error: " + ex.toString());
                        val = null;