欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用POI解析帶圖片的excel文件(簡(jiǎn)潔好用!)

 更新時(shí)間:2023年08月23日 10:15:00   作者:滴丶學(xué)生卡  
這篇文章主要給大家介紹了關(guān)于Java如何使用POI解析帶圖片的excel文件的相關(guān)資料,最近項(xiàng)目需要讀取excel中的信息,帶圖片,所以這里給大家總結(jié)下,需要的朋友可以參考下

一、場(chǎng)景

這天遇到這個(gè)這樣的需求,需要導(dǎo)入表格中的數(shù)據(jù),還得支持帶圖片;這應(yīng)該難不倒咱阿里的EasyExcel,打開官網(wǎng)文檔一看哦豁,明確表示暫時(shí)不支持解析帶圖片的Excel......

好了,這下只能看POI了,然后想起來項(xiàng)目里引入的HuTools工具類,它應(yīng)該封裝好了吧;于是決定用HuTools里面的ExcelUtil來實(shí)現(xiàn)!

二、秀個(gè)騷操作,使用EasyExcel+HuTools(POI)實(shí)現(xiàn)解析

說明:因?yàn)镋asyExcel實(shí)在太好用了,加上看完HuTools工具類的方法發(fā)現(xiàn),圖片解析是單獨(dú)的,所以決定使用EasyExcel來解析數(shù)據(jù),用HuTools工具類來解析里面的圖片;如果表格數(shù)據(jù)過大則謹(jǐn)慎使用筆者這種方式哦。

1、定義EasyExcel解析用到的與表格映射的JavaBean

/**
 * <p>
 * 任務(wù)表格映射
 * </p>
 *
 * @author kobe
 * @since 2023-03-04
 */
@Data
public class TaskExcelDto implements Serializable {
    private static final long serialVersionUID = 1L;
    //這個(gè)注解表示解析的時(shí)候忽略
    @ExcelIgnore
    private Long id;
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("歸屬狀態(tài)")
    private String status;
    @ExcelProperty("計(jì)劃代碼")
    private String planCode;
    @ExcelProperty("日期")
    private Date issueDate;
    @ExcelProperty("時(shí)間")
    private String time;
    @ExcelProperty("任務(wù)分類")
    private String types;
    @ExcelProperty("訂單號(hào)")
    private String orderNum;
    @ExcelProperty("金額")
    private Double money;
    @ExcelProperty("提成")
    private Double divvy;
    @ExcelProperty("總金額")
    private Double totalMoney;
    @ExcelProperty("計(jì)劃人")
    private String planer;
    @ExcelProperty("所設(shè)關(guān)鍵詞")
    private String keywords;
    @ExcelIgnore
    private String picture;
    // 圖片數(shù)據(jù),臨時(shí)變量
    @ExcelIgnore
    private PictureData pictureData;
}

2、實(shí)現(xiàn)代碼

    @ApiOperation("excel導(dǎo)入")
    @PostMapping("v1/excel/import")
    public JsonResult importByExcel(MultipartFile file) throws IOException {
        List<TaskExcelDto> list = new ArrayList<>();
        // EasyExcel解析普通數(shù)據(jù)(這里為了演示簡(jiǎn)單寫一下,實(shí)戰(zhàn)建議寫個(gè)實(shí)現(xiàn)類)
        EasyExcel.read(file.getInputStream(), TaskExcelDto.class, new AnalysisEventListener<TaskExcelDto>() {
            @Override
            public void invoke(TaskExcelDto data, AnalysisContext context) {
                list.add(data);
            }
            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {
            }
        }).sheet().doRead();
        // 使用HuTools工具類解析表格的圖片
        //注意這個(gè)方法只能讀取浮動(dòng)的圖片,嵌入單元格的讀取不到!
        //注意這個(gè)方法只能讀取浮動(dòng)的圖片,嵌入單元格的讀取不到!
        //注意這個(gè)方法只能讀取浮動(dòng)的圖片,嵌入單元格的讀取不到!
        ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
        //key是圖片位置,row_cell的格式;value是圖片數(shù)據(jù)
        Map<String, PictureData> picMap = ExcelPicUtil.getPicMap(reader.getWorkbook(), 0);
        //這里只關(guān)心行數(shù),把數(shù)據(jù)裝到Bean里面去,也可用map在循環(huán)中取獲取
        picMap.forEach((k, v) -> {
            String[] split = k.split(StrUtil.UNDERLINE);
            Integer index = Integer.valueOf(split[0]);
            list.get(index - 1).setPictureData(v);
        });
        //建議使用并行流上傳圖片,多線程加速
        list.stream().parallel().forEach(i -> {
            if (null == i.getPictureData()) {
                return;
            }
            String mimeType = i.getPictureData().getMimeType();
            String[] mimeTypes = mimeType.split(StrUtil.SLASH);
            try {
                String fileName =  UUID.randomUUID() + "." + mimeTypes[1];
                FileUploadResult fileUploadResult = super.uploadFile(i.getPictureData().getData(), fileName );
                i.setPicture(fileUploadResult != null ? fileUploadResult.getWebPath());
            } catch (IOException e) {
                log.error("file upload error, {}", JSONUtil.toJsonStr(i));
            }
        });
        // 調(diào)用業(yè)務(wù)代碼保存數(shù)據(jù)
        service.importByExcel(list);
        return JsonResult.success();
    }

3、注意:

這個(gè)讀取方法只能讀取浮動(dòng)的圖片,嵌入單元格的讀取不到!如果發(fā)現(xiàn)沒讀取到,檢查一下Excel中圖片在單元格中的樣式,右擊“切換為浮動(dòng)圖片”即可。

總結(jié)

到此這篇關(guān)于Java使用POI解析帶圖片的excel文件的文章就介紹到這了,更多相關(guān)Java解析帶圖片excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于springcloud集成nacos遇到的問題

    關(guān)于springcloud集成nacos遇到的問題

    這篇文章主要介紹了關(guān)于springcloud集成nacos遇到的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java錯(cuò)誤:?不支持發(fā)行版本?22的簡(jiǎn)單解決方法

    java錯(cuò)誤:?不支持發(fā)行版本?22的簡(jiǎn)單解決方法

    這篇文章主要給大家介紹了關(guān)于java錯(cuò)誤:?不支持發(fā)行版本?22的簡(jiǎn)單解決方法,這個(gè)錯(cuò)誤通常是由于Java版本不兼容導(dǎo)致的,請(qǐng)檢查您的項(xiàng)目所使用的Java版本是否與您當(dāng)前安裝的Java版本一致,需要的朋友可以參考下
    2024-06-06
  • SpringBoot中@Autowired注入service時(shí)出現(xiàn)循環(huán)依賴問題的解決方法

    SpringBoot中@Autowired注入service時(shí)出現(xiàn)循環(huán)依賴問題的解決方法

    在Spring Boot開發(fā)過程中,@Autowired注入Service時(shí)出現(xiàn)循環(huán)依賴是一個(gè)常見問題,循環(huán)依賴指的是兩個(gè)或多個(gè)Bean相互依賴,形成閉環(huán),導(dǎo)致Spring容器無法正常初始化這些Bean,這里提供幾種解決Spring Boot中@Autowired注入Service時(shí)循環(huán)依賴問題的方法
    2024-02-02
  • JPA之映射mysql text類型的問題

    JPA之映射mysql text類型的問題

    這篇文章主要介紹了JPA之映射mysql text類型的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • org.slf4j.Logger中info()方法的使用詳解

    org.slf4j.Logger中info()方法的使用詳解

    這篇文章主要介紹了org.slf4j.Logger中info()方法的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java中EnvironmentAware 接口的作用

    Java中EnvironmentAware 接口的作用

    本文主要介紹了Java中EnvironmentAware 接口的作用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 詳解J2EE開發(fā)的網(wǎng)站部署到阿里云服務(wù)器的方法

    詳解J2EE開發(fā)的網(wǎng)站部署到阿里云服務(wù)器的方法

    這篇文章主要介紹了詳解J2EE開發(fā)的網(wǎng)站部署到阿里云服務(wù)器的方法,需要的朋友可以參考下
    2018-01-01
  • Java 實(shí)現(xiàn)瀏覽器下載文件及文件預(yù)覽

    Java 實(shí)現(xiàn)瀏覽器下載文件及文件預(yù)覽

    這篇文章主要介紹了Java 實(shí)現(xiàn)瀏覽器下載文件及文件預(yù)覽,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java雙色球系統(tǒng)開發(fā)詳解

    Java雙色球系統(tǒng)開發(fā)詳解

    這篇文章主要為大家詳細(xì)介紹了Java雙色球系統(tǒng)的開發(fā),超級(jí)簡(jiǎn)單的邏輯,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java使用JNDI連接數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法

    Java使用JNDI連接數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法

    本文主要介紹了Java使用JNDI連接數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評(píng)論