使用PHPExcel讀寫excel

轉載自:https://tlanyan.me/use-phpexcel-to-read-and-write-excel/

PHPOffice出品的PHPExcel是PHP讀取和生成Excel的極佳工具。本文參考官方文檔,對PHPExcel進行簡要總結,希望對使用PHPExcel操作Excel的同行有幫助。

PHPExcel介紹

PHPExcel是用PHP實現的電子表格文檔讀寫類庫,其支持的文檔類型包括:Excel(.xls)後綴,Excel 2007(.xlsx後綴),CSV(.csv後綴),LibreOffice Calc(.ods後綴),PDF和HTML等格式(某些格式只能讀)。PHPExcel運行環境爲PHP 5.2+,需要開啓php_zip、php_xml和php_gd2拓展。

細心的讀者可能看到PHPOffice有另外一款作品:PHPSpreadsheet。PHPSpreadsheet也是一個Excel讀寫類庫,與PHPExcel主要區別是:

  1. PHPSpreadsheet是PHPExcel的重構版,基於PHP的新特性進行了重寫。PHPSpreadsheet要求PHP 5.6+,使用了名字空間、PSR2編碼規範、最新的PHP語言新特性;
  2. 對PHP版本的要求加強。官方的PHP版本支持結束後,PHPSpreadsheet對該版本至多額外支持6個月(意味肯定不支持PHP 5.5及以下版本,PHP5.6的支持也即將終止)。對比之下,PHPExcel依然支持PHP 5.2.0;
  3. 開發組已將所有資源轉移到PHPSpreadsheet,PHPExcel的維護已經停止。

PHPSpreadsheet已經放出1.0.0穩定版,官方不再建議使用PHPExcel。本文內容主要講解PHPExcel,掌握透徹後再轉換到PHPSpreadsheet也是很容易的。

PHPExcel架構

理解PHPExcel的架構,可以先從理解Excel文件的結構開始。一個Excel文件包含多個表單,每個表單包含多個單元;文件、表單和單元都可以單獨設置屬性。這些概念對應到PHPExcel中的類,關係如下:

  • PHPExcel類 < -> Excel文件
  • PHPExcel_Worksheet類 < -> 表單
  • PHPExcel_Cell < -> 單元
  • PHPExcel_DocumentProperties < -> 文件屬性
  • PHPExcel_Style_* < -> 格式設置類

下面開始介紹PHPExcel的常用操作。

使用PHPExcel

根據上面介紹的關係,分excel文件、表單、單元、格式設置四個部分分別介紹PHPExcel的使用方法。

excel文件

一個PHPExcel類的實例代表一個excel文件。新生成的PHPExcel對象,經常需要保存爲文件;反之excel文件常需要導入爲PHPExcel實例。保存和導入的行爲分別由writer和reader負責。爲了正確導入和保存數據,reader和writer需要知道具體的文件格式。PHPExcel提供了工廠類PHPExcel_IOFactory簡化reader和writer的創建。讀寫文件的示例代碼如下:

如果知道具體格式,可以使用具體的類操作:

可用的reader和writer類可以參考下圖:

enter image description here

建議使用工廠方法讀取文件,它能自動探測文件格式並加載。這在讀取用戶上傳不同格式的文件時很有用,避免了格式與後綴名不符可能導致的錯誤。

注意不要混淆PHPExcel和writer/reader對象:PHPExcel持有數據,writer和reader是對其進行序列化和反序列化的輔助類。

表單操作

一個excel文件可以包含多個表單,常用操作包括讀取、新建、複製和刪除表單。表單從屬於excel文件,一般需要掛載到具體的PHPExcel對象上。

獲取表單的方式有多種,如獲取當前表單、獲取指定順序表單、根據名字獲取表單。以下是示例代碼:

創建表單分爲直接excel文件對象直接創建,也可以先創建表單實例,後續再關聯。對應方法爲:

PHPExcel也支持複製表單(包括複製其他PHPExcel對象中的表單):

刪除表單的API比較簡單,只提供了removeSheetByIndex一個方法:

單元操作

單元是承載內容的主體,其上操作比較複雜,大部分的類和API都與單元相關。單元隸屬於具體的表單,使用上和表單類互動最多。

常用操作的包括定位、取值/賦值、格式化等。下面是一些代碼示例:

文件屬性

設置excel文件的屬性,包括常見的作者、標題、創建時間、描述等。該功能由PHPExcel中類型爲DocumentProperties的成員變量負責:

其他

上述介紹了常見的概念和操作,實際中可能會用到的概念還包括:

  • 緩存和性能
  • 圖像、圖表、超鏈接等富文本
  • 日期、貨幣等格式化和本地化
  • 公式設置
  • 打印屬性設置
  • 內容對其、邊距設置等
  • 文件密碼安全設置

這些冷門或高級功能可以參照API文檔。

PHPExcel官方文檔可能稍有繁雜,網絡上的二手資料在深入方面常有欠缺。要用好PHPExcel,一個基本功是搞清楚操作的對象,以及和其他類/對象的關係(這也是面向對象編程的基本功)。本文中提到的PHPExcel->PHPExcel_WorkSheet->PHPExcel_Cell繼承體系,是使用過程中操作最爲頻繁的對象,希望以上說明和示例能加深讀者對PHPExcel類庫的理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章