如何使用 GroupDocs.Watermark Java 從 Excel 中提取附件

在當前以數據為驅動的工作流程中,如何提取附件從 Excel 工作簿是一個常見需求。無論是整合專案資源、歸檔合規文件,或是構建自動化報告管道,能夠抽取嵌入的檔案都能節省時間並避免人工錯誤。在本教學中,你將看到如何設定 GroupDocs.Watermark for Java,逐步瀏覽 java extract excel attachments 的程式碼,並了解 batch process excel attachments 的最佳實踐。

快速解答

  • 哪個函式庫處理 Excel 附件? GroupDocs.Watermark for Java.
  • 哪個方法載入試算表? new Watermarker(filePath, new SpreadsheetLoadOptions()).
  • 我可以用 Java 迭代工作表嗎? 可以 – 使用 content.getWorksheets() 並對每個 SpreadsheetWorksheet 進行迴圈。
  • 生產環境是否需要授權? 需要完整的 GroupDocs.Watermark 授權才能在生產環境使用。
  • 這在大型檔案上能正常運作嗎? 能,只要及時關閉 Watermarker 並使用適當的載入選項。

在 Excel 中「如何提取附件」是什麼意思?

提取附件指的是取得嵌入於 Excel 工作簿工作表中的任何物件——檔案、圖片或連結。這些物件以 SpreadsheetAttachment 形式儲存,且可透過程式存取、檢查並寫入磁碟。

為什麼使用 GroupDocs.Watermark 來提取 Excel 附件?

GroupDocs.Watermark 提供高階 API,抽象化低階的 Office Open XML 處理,讓你專注於業務邏輯而非檔案格式的細節。它亦支援 extract embedded objects excel,提供預覽圖像抽取,並在 Java 8 以上環境中保持一致的運作。

前置條件

  • Java Development Kit (JDK) 8 或以上 – 此函式庫可在任何現代 JDK 上執行。
  • IDE – IntelliJ IDEA、Eclipse,或任何你偏好的編輯器。
  • Maven – 用於相依管理(或自行手動下載 JAR)。
  • 基本的 Java 知識與 Maven 坐標的熟悉度。

設定 GroupDocs.Watermark for Java

Maven 設定

將 GroupDocs 的儲存庫與相依加入你的 pom.xml

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/watermark/java/</url>
   </repository>
</repositories>

<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-watermark</artifactId>
      <version>24.11</version>
   </dependency>
</dependencies>

直接下載(備選)

如果不想使用 Maven,可從 GroupDocs.Watermark for Java releases 取得最新的 JAR。

授權取得步驟

  • 免費試用: 在 GroupDocs 入口網站註冊以獲得限時試用。
  • 臨時授權: 開發期間使用臨時金鑰。
  • 完整授權: 購買正式授權以獲得無限制使用。

基本初始化與設定

建立指向 Excel 檔案的 Watermarker 實例:

import com.groupdocs.watermark.Watermarker;

public class DocumentSetup {
    public static void main(String[] args) {
        String filePath = "YOUR_DOCUMENT_DIRECTORY/spreadsheet.xlsx";
        Watermarker watermarker = new Watermarker(filePath);
        
        // Your code to manipulate the document goes here
        
        watermarker.close();
    }
}

如何從 Excel 提取附件 – 步驟指南

載入並準備試算表

首先,使用 SpreadsheetLoadOptions 載入活頁簿,讓函式庫知道正在處理 Excel 檔案:

import com.groupdocs.watermark.options.SpreadsheetLoadOptions;
import com.groupdocs.watermark.Watermarker;

public class ExtractAttachments {
    public static void extract() {
        SpreadsheetLoadOptions loadOptions = new SpreadsheetLoadOptions();
        String filePath = "YOUR_DOCUMENT_DIRECTORY/spreadsheet.xlsx";
        
        Watermarker watermarker = new Watermarker(filePath, loadOptions);

取得試算表內容

取得高階內容物件,以便存取工作表及其附件:

import com.groupdocs.watermark.contents.SpreadsheetContent;

// Get the content of the spreadsheet.
SpreadsheetContent content = watermarker.getContent(SpreadsheetContent.class);

迭代工作表 (java iterate excel worksheets java)

遍歷每個工作表,然後遍歷該工作表內的每個附件:

import com.groupdocs.watermark.contents.SpreadsheetWorksheet;

for (SpreadsheetWorksheet worksheet : content.getWorksheets()) {
    for (SpreadsheetAttachment attachment : worksheet.getAttachments()) {

抽取附件詳細資訊

對於每個 SpreadsheetAttachment,你可以讀取其中繼資料、預覽圖像以及原始檔案位元組:

import com.groupdocs.watermark.contents.SpreadsheetAttachment;

// Display alternative text and frame details of each attachment.
System.out.println("Alternative text: " + attachment.getAlternativeText());
System.out.println("Attachment frame x-coordinate: " + attachment.getX());
System.out.println("Attachment frame y-coordinate: " + attachment.getY());
System.out.println("Attachment frame width: " + attachment.getWidth());
System.out.println("Attachment frame height: " + attachment.getHeight());

// Check if a preview image is available and display its size.
int imageSize = (attachment.getPreviewImageContent() != null) ? attachment.getPreviewImageContent().length : 0;
System.out.println("Preview image size: " + imageSize);

if (attachment.isLink()) {
    System.out.println("Full path to the attached file: " + attachment.getSourceFullName());
} else {
    System.out.println("File type: " + attachment.getDocumentInfo().getFileType());
    System.out.println("Name of the source file: " + attachment.getSourceFullName());
    System.out.println("File size: " + attachment.getContent().length);
}

關閉資源

完成後務必釋放 Watermarker 以釋放記憶體:

// Close the Watermarker to release resources.
watermarker.close();

實務應用

  • 自動化資料整合: 從一批試算表中抽取所有附件檔案,以供資料湖使用。
  • 文件歸檔: 將抽取的附件與原始活頁簿一起儲存,以供合規稽核。
  • 動態報告產生: 使用抽取的圖片或 PDF 作為自訂報告引擎的輸入。

批次處理 Excel 附件的效能考量

  • 記憶體管理: 每處理完一個檔案後呼叫 watermarker.close();可考慮使用 try‑with‑resources 模式。
  • 批次迴圈: 將檔案分成可管理的批次(例如一次 20‑30 個)處理,以免佔滿 JVM 堆積。
  • 載入選項調校: 調整 SpreadsheetLoadOptions(例如停用不必要的功能),以加速大型活頁簿的載入。

常見問題與解決方案

問題原因解決方案
attachment.getPreviewImageContent() 發生 NullPointerException附件沒有預覽圖像。加入空值檢查(如程式碼所示)。
處理大量大型檔案時記憶體激增Watermarker 未及時關閉。使用 try { … } finally { watermarker.close(); } 區塊。
附件未列出使用較舊的 GroupDocs 版本,缺乏完整附件支援。升級至最新的 24.11 版(或更新版本)。

常見問答

Q: 我可以從受密碼保護的 Excel 檔案中提取附件嗎?
A: 可以。建立 Watermarker 實例時,使用相應的重載提供密碼。

Q: 這同時支援 .xls(BIFF)檔案以及 .xlsx 嗎?
A: GroupDocs.Watermark 同時支援傳統的 .xls 與現代的 .xlsx 格式。

Q: 我該如何將抽取的附件儲存到磁碟?
A: 透過 attachment.getContent() 取得位元組陣列,然後寫入 FileOutputStream

Q: 有沒有辦法只抽取特定類型的附件(例如 PDF)?
A: 在處理前以 attachment.getDocumentInfo().getFileType() 進行過濾。

Q: 商業使用需要什麼授權?
A: 生產環境部署需要完整的 GroupDocs.Watermark 授權。


最後更新: 2025-12-26
測試環境: GroupDocs.Watermark 24.11 for Java
作者: GroupDocs