首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

使用 PHPExcel 庫偵測 Excel 檔案是否包含圖片

     編輯:PHP 綜合知識

在處理 Excel 匯入功能時,有時需要判斷上傳的試算表中是否包含圖片(如簽名圖、商品照片等)。PHPExcel 庫提供了 getDrawingCollection() 方法,可輕鬆取得工作表中的所有繪圖物件。

核心程式碼範例

<?php
require_once 'PHPExcel/IOFactory.php';

$excelPath = 'Test.xls';

// 建立 Excel5 讀取器(適用 .xls 格式)
$objReader = PHPExcel_IOFactory::createReader('Excel5');
// 僅讀取資料,不載入格式樣式,提升效能
$objReader->setReadDataOnly(true);

$objPHPExcel = $objReader->load($excelPath);
$currentSheet = $objPHPExcel->getActiveSheet();

// 取得該工作表的所有繪圖集合
$allImages = $currentSheet->getDrawingCollection();

if (count($allImages) > 0) {
    echo "偵測到圖片,共 " . count($allImages) . " 張";
    // 後續處理:遍歷 $allImages 取得圖片路徑、座標、尺寸等
    foreach ($allImages as $drawing) {
        if ($drawing instanceof PHPExcel_Worksheet_Drawing) {
            $path = $drawing->getPath();        // 圖片路徑或 URL
            $coordinate = $drawing->getCoordinate(); // 所在儲存格(如 A1)
            $width = $drawing->getWidth();
            $height = $drawing->getHeight();
            // 進行圖片下載、儲存、關聯資料等邏輯
        }
        // 若為 MemoryDrawing(記憶體圖片),需用 getImageResource() 取得 GD 資源
    }
} else {
    echo "此工作表不包含圖片";
}

補充說明

  • 格式支援:Excel5 讀取 .xls;Excel2007 讀取 .xlsx。實務上建議根據副檔名動態選擇 Reader。
  • 效能考量:大檔案時設定 setReadDataOnly(true) 可大幅減少記憶體佔用,但若需處理圖片,必須設為 false(預設值),否則 getDrawingCollection() 會回傳空集合。
  • PhpSpreadsheet 繼任者:PHPExcel 已停止維護,新專案建議改用 PhpSpreadsheet,API 幾乎相容,只需將命名空間從 PHPExcel 改為 PhpOffice\PhpSpreadsheet。

常見應用場景

  • 匯入商品資料時,同步匯入商品圖片(儲存格內嵌圖)
  • 簽核單據匯入,驗證是否包含簽名圖片
  • 資料清洗:剔除包含圖片的異常列,避免資料庫匯入失敗

掌握 getDrawingCollection() 的用法,能讓 Excel 匯入功能更完整、更貼近實務需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved