最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、場景

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

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

二、秀個騷操作,使用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;
    //這個注解表示解析的時候忽略
    @ExcelIgnore
    private Long id;
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("歸屬狀態(tài)")
    private String status;
    @ExcelProperty("計(jì)劃代碼")
    private String planCode;
    @ExcelProperty("日期")
    private Date issueDate;
    @ExcelProperty("時間")
    private String time;
    @ExcelProperty("任務(wù)分類")
    private String types;
    @ExcelProperty("訂單號")
    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ù),臨時變量
    @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ù)(這里為了演示簡單寫一下,實(shí)戰(zhàn)建議寫個實(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工具類解析表格的圖片
        //注意這個方法只能讀取浮動的圖片,嵌入單元格的讀取不到!
        //注意這個方法只能讀取浮動的圖片,嵌入單元格的讀取不到!
        //注意這個方法只能讀取浮動的圖片,嵌入單元格的讀取不到!
        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、注意:

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

總結(jié)

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

相關(guān)文章

  • 解決MyBatis Mapper的XML文件SQL語句無法自動提示問題(親測有效)

    解決MyBatis Mapper的XML文件SQL語句無法自動提示問題(親測有效)

    這篇文章主要給大家介紹了如何解決MyBatis Mapper的XML文件SQL語句無法自動提示的問題,文中有詳細(xì)的原因分析,以及通過圖文介紹的解決方案,需要的朋友可以參考下
    2023-10-10
  • Java面向?qū)ο蠡A(chǔ)知識之抽象類和接口

    Java面向?qū)ο蠡A(chǔ)知識之抽象類和接口

    這篇文章主要介紹了Java面向?qū)ο蟮某橄箢惡徒涌?文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-11-11
  • Java實(shí)現(xiàn)簡單密碼加密功能

    Java實(shí)現(xiàn)簡單密碼加密功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單密碼加密功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 你知道將Bean交給Spring容器管理有幾種方式(推薦)

    你知道將Bean交給Spring容器管理有幾種方式(推薦)

    Spring核心是?IOC?和?AOP?,我們在Spring項(xiàng)目中,我們需要將Bean交給Spring容器,也就是IOC管理,這樣你才可以使用注解來進(jìn)行依賴注入,這篇文章主要介紹了你知道將Bean交給Spring容器管理有幾種方式,需要的朋友可以參考下
    2022-10-10
  • Spring data JPA只查詢部分字段問題及解決

    Spring data JPA只查詢部分字段問題及解決

    這篇文章主要介紹了Spring data JPA只查詢部分字段問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • JavaEE7+Websockets+GlassFish4打造聊天室

    JavaEE7+Websockets+GlassFish4打造聊天室

    Java EE 7已經(jīng)發(fā)布很久了,新增加了很多新的功能和特性,如新增或更新了不少的JSR標(biāo)準(zhǔn)。其中特別受到關(guān)注的是Websockets。它的一個好處之一是減少了不必要的網(wǎng)絡(luò)流量。它主要是用于在客戶機(jī)和服務(wù)器之間建立單一的雙向連接。
    2015-09-09
  • java線程池中Worker線程執(zhí)行流程原理解析

    java線程池中Worker線程執(zhí)行流程原理解析

    這篇文章主要為大家介紹了java線程池中Worker線程執(zhí)行流程原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • JavaWeb中的組件Filter過濾器解析

    JavaWeb中的組件Filter過濾器解析

    這篇文章主要介紹了JavaWeb中的組件Filter過濾器解析,Filter過濾器是一種用于處理和轉(zhuǎn)換數(shù)據(jù)的工具,常用于Web開發(fā)中,它可以在請求到達(dá)服務(wù)器之前或響應(yīng)返回給客戶端之前對數(shù)據(jù)進(jìn)行預(yù)處理或后處理,需要的朋友可以參考下
    2023-10-10
  • SpringBoot @PostMapping接收HTTP請求的流數(shù)據(jù)問題

    SpringBoot @PostMapping接收HTTP請求的流數(shù)據(jù)問題

    這篇文章主要介紹了SpringBoot @PostMapping接收HTTP請求的流數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java中replace、replaceAll和replaceFirst函數(shù)的用法小結(jié)

    Java中replace、replaceAll和replaceFirst函數(shù)的用法小結(jié)

    相信會java的同學(xué)估計(jì)都用過replace、replaceAll、replaceFirst這三個函數(shù),可是,我們真的懂他們嗎?下面通過這篇文章大家再來好好學(xué)習(xí)學(xué)習(xí)下這幾個函數(shù)。
    2016-09-09

最新評論

故城县| 望都县| 昌图县| 安顺市| 华坪县| 武胜县| 勃利县| 吴桥县| 颍上县| 启东市| 江都市| 三台县| 如东县| 甘孜县| 桃园市| 昌宁县| 永仁县| 营口市| 新绛县| 四子王旗| 浮梁县| 兴山县| 洛隆县| 河间市| 贵南县| 漾濞| 朝阳县| 台北市| 宁明县| 广元市| 上犹县| 五原县| 广水市| 福建省| 扬中市| 德保县| 沂源县| 饶平县| 固镇县| 阳江市| 旬邑县|