使用Java實(shí)現(xiàn)獲取excel附件并解析
使用Apache POI處理Excel中的OLE對(duì)象
核心代碼解析
import org.apache.poi.poifs.filesystem.Ole10Native; import org.apache.poi.poifs.filesystem.Ole10NativeException; import org.apache.poi.poifs.filesystem.POIFSFileSystem; try (XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream())) { // 獲取所有嵌入式文件 List<PackagePart> partList = workbook.getAllEmbeddedParts(); for (PackagePart part : partList) { InputStream emb = part.getInputStream(); if (emb != null) { // 解析ole文件 POIFSFileSystem fs = new POIFSFileSystem(emb); Ole10Native ole = Ole10Native.createFromEmbeddedOleObject(fs.getRoot()); // 獲取并處理原始文件名 String originalName = ole.getLabel(); // 獲取文件內(nèi)容 byte[] fileContent = ole.getDataBuffer(); // 這里可以添加業(yè)務(wù)處理邏輯 } } } catch (RuntimeException e) { throw new RuntimeException(e); }
1. 獲取文件流
- 從文件系統(tǒng):
new FileInputStream("path/to/file.xlsx")
- 從上傳的MultipartFile:
file.getInputStream()
2. 加載Excel工作簿
使用XSSFWorkbook
類加載XLSX格式的Excel文件:
try (XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream())) { }
try-with-resources
語(yǔ)句確保工作簿在使用后自動(dòng)關(guān)閉。
3. 獲取所有嵌入式對(duì)象
getAllEmbeddedParts()
方法返回工作簿中所有嵌入式對(duì)象的列表:
List<PackagePart> partList = workbook.getAllEmbeddedParts();
4. 處理每個(gè)嵌入式對(duì)象
遍歷所有嵌入式對(duì)象:
for (PackagePart part : partList) { InputStream emb = part.getInputStream(); if (emb != null) { // 處理輸入流 } }
5. 解析OLE對(duì)象
使用POIFSFileSystem
解析OLE對(duì)象:
POIFSFileSystem fs = new POIFSFileSystem(emb); Ole10Native ole = Ole10Native.createFromEmbeddedOleObject(fs.getRoot());
6. 獲取OLE對(duì)象信息
從OLE對(duì)象中提取有用信息:
String originalName = ole.getLabel(); // 原始文件名 byte[] fileContent = ole.getDataBuffer(); // 文件內(nèi)容
實(shí)際應(yīng)用場(chǎng)景
?文件提取:將嵌入的OLE對(duì)象提取并保存到文件系統(tǒng)
?內(nèi)容分析:檢查嵌入文件的內(nèi)容是否符合安全要求
?數(shù)據(jù)遷移:將嵌入對(duì)象轉(zhuǎn)換為其他格式
?文檔審計(jì):記錄文檔中所有嵌入對(duì)象的信息
方法補(bǔ)充
java 讀取excel中的附件
準(zhǔn)備工作
在開始之前,我們需要準(zhǔn)備好以下工具和庫(kù):
- Apache POI:一個(gè)用于處理Microsoft Office格式文件的Java庫(kù)。
- Excel文件:包含附件的Excel文件。
你可以在Maven中添加Apache POI庫(kù)的依賴:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency>
讀取Excel中的附件
首先,我們需要?jiǎng)?chuàng)建一個(gè)Java類來(lái)讀取Excel文件中的附件。以下是一個(gè)示例代碼:
import org.apache.poi.ss.usermodel.*; import java.io.FileInputStream; import java.io.IOException; public class ExcelAttachmentReader { public void readAttachments(String filePath) { try { FileInputStream file = new FileInputStream(filePath); Workbook workbook = WorkbookFactory.create(file); Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { if (cell.getCellTypeEnum() == CellType.ATTACHMENT) { Attachment attachment = cell.getAttachment(); // 處理附件 System.out.println("Attachment found: " + attachment); } } } file.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { ExcelAttachmentReader reader = new ExcelAttachmentReader(); reader.readAttachments("example.xlsx"); } }
在這段代碼中,我們首先通過(guò)FileInputStream打開Excel文件,并使用WorkbookFactory創(chuàng)建Workbook對(duì)象。然后,我們遍歷每個(gè)單元格,如果單元格的類型為ATTACHMENT,則獲取附件對(duì)象并進(jìn)行處理。
到此這篇關(guān)于使用Java實(shí)現(xiàn)獲取excel附件并解析的文章就介紹到這了,更多相關(guān)Java excel附件獲取與解析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mybatis主表與明細(xì)表一對(duì)多的同時(shí)插入操作方法
對(duì)主表(采購(gòu)申請(qǐng)表)和明細(xì)表(申請(qǐng)物資表)同時(shí)進(jìn)行插入操作insert,怎么實(shí)現(xiàn)呢,下面給大家分享mybatis主表與明細(xì)表一對(duì)多的同時(shí)插入操作方法,感興趣的朋友一起看看吧2023-02-02Java如何根據(jù)key值修改Hashmap中的value值
這篇文章主要介紹了Java如何根據(jù)key值修改Hashmap中的value值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03Java設(shè)計(jì)模式之原型模式(Prototype模式)介紹
這篇文章主要介紹了Java設(shè)計(jì)模式之原型模式(Prototype模式)介紹,本文講解了如何使用原型模式并給出了代碼實(shí)例,需要的朋友可以參考下2015-03-03沒(méi)有外網(wǎng)IDEA離線使用maven倉(cāng)庫(kù)的方法
這篇文章主要介紹了沒(méi)有外網(wǎng),IDEA如何離線使用maven倉(cāng)庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08POI XSSFSheet shiftRows bug問(wèn)題解決
這篇文章主要介紹了POI XSSFSheet shiftRows bug問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07導(dǎo)入renren-fast出現(xiàn)問(wèn)題以及解決方案
文章介紹了在導(dǎo)入renren-fast項(xiàng)目時(shí)遇到的maven繼承parent問(wèn)題,并提供了解決方案,即在pom文件中添加``標(biāo)簽,此外,還詳細(xì)解釋了Maven的``標(biāo)簽的作用以及MAVEN構(gòu)建jar包時(shí)的查找順序2024-11-11Java使用DateUtils對(duì)日期進(jìn)行數(shù)學(xué)運(yùn)算經(jīng)典應(yīng)用示例【附DateUtils相關(guān)包文件下載】
這篇文章主要介紹了Java使用DateUtils對(duì)日期進(jìn)行數(shù)學(xué)運(yùn)算的方法,可實(shí)現(xiàn)針對(duì)日期時(shí)間的各種常見(jiàn)運(yùn)算功能,并附帶DateUtils的相關(guān)包文件供讀者下載使用,需要的朋友可以參考下2017-11-11Java躲不過(guò)設(shè)計(jì)模式的坑之代理模式詳解
設(shè)計(jì)模式看來(lái)更像是一種設(shè)計(jì)思維或設(shè)計(jì)思想,為你的項(xiàng)目工程提供方向,讓你的項(xiàng)目工程更加健壯、靈活,延續(xù)生命力。本文即將分享的是設(shè)計(jì)模式的其中一種:代理模式,感興趣的可以了解一下2022-09-09IDEA配置Tomcat創(chuàng)建web項(xiàng)目的詳細(xì)步驟
Tomcat是一個(gè)Java?Web應(yīng)用服務(wù)器,實(shí)現(xiàn)了多個(gè)Java?EE規(guī)范(JSP、Java?Servlet等),這篇文章主要給大家介紹了關(guān)于IDEA配置Tomcat創(chuàng)建web項(xiàng)目的詳細(xì)步驟,需要的朋友可以參考下2023-12-12