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

PHP 讀取 Excel 檔案內容完整實作指南

     編輯:PHP 綜合知識

前言

在 PHP 開發中,匯入 Excel 資料是常見需求。本文提供一個完整的 Spreadsheet_Excel_Reader 類別實作,支援 BIFF 7 與 BIFF 8 格式(即 .xls 檔案),可直接解析儲存格數值、日期、公式等資料,並處理合併儲存格、字串共用表(SST)等細節。

核心架構

程式碼包含兩大核心類別:

  • OLERead:負責解析 OLE 複合文件結構,提取 Workbook 資料流。
  • ReadexcelSystem:繼承 OLERead,解析 BIFF 記錄,建立工作表、儲存格、格式化資訊的陣列結構。

關鍵功能解析

1. OLE 文件解析

OLERead::read() 讀取檔案,驗證 OLE 標識符(D0 CF 11 E0 A1 B1 1A E1),解析大區塊鏈、小區塊鏈、屬性儲存表,最終透過 getWorkBook() 取得 Workbook 二進位資料。

2. BIFF 記錄解析

_parse() 依序處理:

  • BOF:確認版本(BIFF7/BIFF8)與子流類型(Workbook Globals)。
  • SST:共用字串表,支援 Unicode、Rich Text、延續記錄。
  • FORMAT、XF:儲存格格式與擴展格式,自動判斷日期、數字、百分比等類型。
  • BOUNDSHEET:記錄工作表名稱與偏移位置。

3. 工作表解析

_parsesheet() 針對每個工作表處理:

  • DIMENSION:取得列/欄範圍。
  • MERGEDCELLS:記錄合併儲存格的 rowspan/colspan。
  • RK、NUMBER、FORMULA、LABELSST、BOOLERR:各類儲存格資料類型,自動套用格式化轉換為字串與原始值。

4. 日期與數值轉換

createDate() 依 1900/1904 紀元計算 Unix 時間戳;createNumber() 與 _GetIEEE754() 處理 IEEE 754 雙精度浮點數與 RK 格式整數編碼。

使用範例

<?php
$data = new ReadexcelSystem();
$data->setOutputEncoding('utf-8');
$data->read('/path/to/file.xls');
print_r($data->sheets[0]['cells']);
?>

$data->sheets[0]['cells'] 為二維陣列 [row][col] => 格式化後字串,cellsInfo 則包含 type(date/number/unknown)、raw 原始值。

注意事項

  • 僅支援 .xls(BIFF7/8),不支援 .xlsx(OOXML)。
  • 大檔案記憶體消耗較大,建議搭配分批處理或改用 PhpSpreadsheet。
  • 編碼轉換預設使用 iconv,可改用 mb_convert_encoding。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved