日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

apache poi excel显示 base64 图片_数据处理之带图片Excel数据处理解惑

發(fā)布時間:2025/3/12 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 apache poi excel显示 base64 图片_数据处理之带图片Excel数据处理解惑 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

小編最近項目中遇到一個大批量Excel數(shù)據(jù)提取的問題,因為Excel數(shù)據(jù)中含有圖片,所以在程序處理時遇到了困難,小編花了點時間才解決了這個問題,所以在這里mark一下。

1 問題描述

首先來描述一下數(shù)據(jù)處理的需求,如下圖所以是給定Excel表的數(shù)據(jù)結(jié)構(gòu)(非項目數(shù)據(jù),自己構(gòu)造),數(shù)據(jù)包括人的照片、身份證號、生日等信息,數(shù)據(jù)處理的需求是將Excel中的圖片提取出來并命名為對應(yīng)身份證號碼保存。

2 python讀取Excel內(nèi)容

作為一個一個程序員首先想到的就是寫一個腳本來實現(xiàn)自動化提取與重命名,于是想編寫個python腳本來實現(xiàn)。大體設(shè)想就是,下載安裝python讀取Excel的包,讀取sheet中的數(shù)據(jù)行然后將“照片”列不為空的照片保存為該行“身份證”命名的圖片。

用pip安裝xlrd后,用如下代碼進行數(shù)據(jù)讀入測試:

讀取數(shù)據(jù)后的輸出如下:

由python打印的輸出結(jié)果分析可知,python讀取Excel時將Excel的sheet分別讀入一個dict中,然后通過遍歷dict和dict中的內(nèi)容來輸出表中內(nèi)容,本例中只有一個sheet中有數(shù)據(jù)。但是,python讀取Excel內(nèi)容只能讀取Excel中的文字,對于Excel列中的圖片xlrd并不能讀取,如上圖所示讀取到的數(shù)據(jù)每一行的第一列均為空值。

3 java讀取Excel中的內(nèi)容及圖片

python不能對所描述問題給出完美解決方案,經(jīng)查閱資料小編準(zhǔn)備轉(zhuǎn)戰(zhàn)java來實現(xiàn)。

首先下載并build如下Excel讀取的POI的jar包:

java讀取Excel中的內(nèi)容和圖片的代碼如下:

package test; import java.io.File; import java.io.FileInputStream; import java.util.List;import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFPictureData; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public final class TestImportXlsx {public static void main(String[] args) throws Exception {File excelFile = new File("/root/zachary/extract_img/data.xlsx");XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(excelFile));XSSFSheet sheet = wb.getSheetAt(0);for (Row row : sheet) {for (Cell cell : row) {switch (cell.getCellType()) {case Cell.CELL_TYPE_STRING:System.out.print(cell.getRichStringCellValue().getString());System.out.print("|");break;case Cell.CELL_TYPE_NUMERIC:if (DateUtil.isCellDateFormatted(cell)) {System.out.print(String.valueOf(cell.getDateCellValue()));} else {System.out.print(cell.getNumericCellValue());}System.out.print("|");break;case Cell.CELL_TYPE_BOOLEAN:System.out.print(cell.getBooleanCellValue());System.out.print("|");break;default:}}System.out.println();} //讀取圖片List<XSSFPictureData> pictures = wb.getAllPictures(); for (int i = 0; i < pictures.size(); i++) {XSSFPictureData pictureData = pictures.get(i);byte[] picData = pictureData.getData();System.out.println("image-size:" + picData.length);} System.out.println(wb.getSheetName(0));} }

troubleshoot:

應(yīng)用java能夠讀取到Excel中的文字與圖片,那么就能利用其相關(guān)性進行圖片存儲并重命名。麻煩的問題是,原始數(shù)據(jù)中存在圖片列為空的行,但是java的POI包只能按順序獲取到圖片并已將圖片為空的行自動去除,那么這樣按照圖片索引找的身份證ID和真正的ID會出現(xiàn)偏差。

為了去除圖片列為空的行,需要對Excel在java讀取時去掉為空的行。但是面對龐大的Excel手動去除成了一大難題,因為插入的圖片是附在Excel單元格上的,所以python在讀取該列時才會都讀為空,java也只能按照圖片在Excel中的位置順序載入圖片。經(jīng)過試驗,并不能通過查找空值和排序來處理掉Excel中圖片列為空的行。

4 Excel圖片列為空數(shù)據(jù)預(yù)處理

小編經(jīng)過Excel的多方嘗試,給出下面無圖片行數(shù)據(jù)刪除的Excel操作。

1.選中相片列---->開始---->條件格式---->突出顯示單元格規(guī)則---->重復(fù)值---->選擇淺紅色文本填充重復(fù)值:

2.在相片列按顏色篩選內(nèi)容:選中相片列--->開始---->排序和篩選--->篩選--->在相片列按照淺紅色篩選內(nèi)容。

3.經(jīng)過篩選后只顯示相片列為空的行,這樣我們只需要刪除了篩選出的行,然后恢復(fù)篩選前的條件即可得到刪除相片列為空行的數(shù)據(jù)結(jié)果。

4 總結(jié)

綜合2、3兩步得到完整解決開篇描述問題的解決方案:

Excel中刪除相片列為空行的數(shù)據(jù)---->java讀取圖片和身份證ID---->圖片以ID重命名存

本篇內(nèi)容在本人個人公眾號上也已發(fā)布,歡迎關(guān)注本人微信公眾號“勤菜鳥”。

Reference

1.http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html

2.https://blog.csdn.net/qw0907/article/details/54617706

總結(jié)

以上是生活随笔為你收集整理的apache poi excel显示 base64 图片_数据处理之带图片Excel数据处理解惑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。