項目中有excel導入功能,并且需要導入excel中的圖片;模板如圖:
已知office中插入的圖片為浮動形式;如圖:
wps中可以插入浮動圖片,也可以插入嵌入單元格圖片;如圖:
并且在wps嵌入單元格形式的圖片可以看到使用的是公式;如圖:
?問題來了,如何獲取圖片? 并且將圖片與單元格進行對應
浮動形式圖片獲取網上一搜一大把 不多說
主要說下wps如何將單元格和獲取到的圖片對應
開始分析:
已知這個圖片公式中的圖片ID是?ID_DAF859A2B4904BF7A304D49029CAD99C
poi方法可以獲取到工作表中所有圖片? 那么問題來了 如何將圖片和圖片ID對應起來
poi中沒有方法可以找到對應關系?
?開始找對應關系:
將excel文件改后綴為zip? 并進行解壓
解壓后看到文件xl路徑下有個cellimages.xml
?打開并格式化后內容如下:
?可以看到這個文件里面有圖片ID的數據結構 但是又是如何和圖片對應起來的呢
上面我們發現如果有圖片ID和圖片名稱的對應關系 那么我們就能確定圖片ID和代碼中獲取的圖片對應關系,但是很遺憾 這里沒有這個對應關系? ????????接下來繼續找
?我們發現在解壓文件夾下xl\_rels有個cellimages.xml.rels 文件
打開文件并格式化后如下:
然后就可以找到對應關系了
?有了對應關系就可以開始擼代碼了
接下來貼代碼:
1.使用的依賴
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.11</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.3.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version><scope>compile</scope></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.34</version></dependency>
2.方法中傳入代碼中的圖片公式 以及上傳的文件 返回map類型
嵌入形式圖片鍵為公式 浮動形式圖片為起始單元格索引拼接字符串
方法中首先截取字符串 獲取圖片ID
?接下來獲取xl/cellimages.xml文件中的rId和圖片ID?
再接下來獲取rId和圖片名稱對應關系
最后根據圖片名稱去對應工作表中獲取到的圖片
?就可以根據這個map去進行操作了
已將代碼打包?