摘要:要求,使用了名字空間編碼規范最新的語言新特性對版本的要求加強。已經放出穩定版,官方不再建議使用。保存和導入的行為分別由和負責。注意不要混淆和對象持有數據,和是對其進行序列化和反序列化的輔助類。單元隸屬于具體的表單,使用上和表單類互動最多。
轉載請注明文章出處:https://tlanyan.me/use-phpexc...
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主要區別是:
PHPSpreadsheet是PHPExcel的重構版,基于PHP的新特性進行了重寫。PHPSpreadsheet要求PHP 5.6+,使用了名字空間、PSR2編碼規范、最新的PHP語言新特性;
對PHP版本的要求加強。官方的PHP版本支持結束后,PHPSpreadsheet對該版本至多額外支持6個月(意味肯定不支持PHP 5.5及以下版本,PHP5.6的支持也即將終止)。對比之下,PHPExcel依然支持PHP 5.2.0;
開發組已將所有資源轉移到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的創建。讀寫文件的示例代碼如下:
// 讀取文件,自動探測文件格式 $excel = PHPExcel_IOFactory::load("./foo.xlsx"); // 新建excel文件,保存為Excel 2007格式 $excel2 = new PHPExcel(); $writer = PHPExcel_IOFactory::createWriter($excel2, "Excel2007"); $writer->save("./foo2.xlsx");
如果知道具體格式,可以使用具體的類操作:
// 讀文件 $reader = PHPExcel_Reader_Excel2007(); $excel = $reader->load("./foo1.xlsx"); // 寫文件 $writer = PHPExcel_Writer_Excel2007($excel); $writer->save("./foo2.xlsx");
可用的reader和writer類可以參考下圖:
建議使用工廠方法讀取文件,它能自動探測文件格式并加載。這在讀取用戶上傳不同格式的文件時很有用,避免了格式與后綴名不符可能導致的錯誤。
注意不要混淆PHPExcel和writer/reader對象:PHPExcel持有數據,writer和reader是對其進行序列化和反序列化的輔助類。
表單操作一個excel文件可以包含多個表單,常用操作包括讀取、新建、復制和刪除表單。表單從屬于excel文件,一般需要掛載到具體的PHPExcel對象上。
獲取表單的方式有多種,如獲取當前表單、獲取指定順序表單、根據名字獲取表單。以下是示例代碼:
$sheet = $excel->getActiveSheet(); // 獲取第二個表單,編號從0開始 $sheet = $excel->getSheet(1); $sheet = $excel->getSheetByName("Worksheet 1");
創建表單分為直接excel文件對象直接創建,也可以先創建表單實例,后續再關聯。對應方法為:
$excel->createSheet(); $sheet = new PHPExcel_Worksheet($excel, "sheet 1"); // 一些其他操作 // 作為第二個表單插入到文檔中 $excel->addSheet($sheet, 1);
PHPExcel也支持復制表單(包括復制其他PHPExcel對象中的表單):
// 復制表單 $sheet = clone $excel->getSheet(0); $sheet->setTitle("new sheet"); $excel->addSheet($sheet, 1); // $excel->addExternalSheet可以添加其他文件的表單刪除表單的API比較簡單,只提供了`removeSheetByIndex`一個方法:
// 刪除最后一個表單 $index = $excel->getSheetCount() - 1; $excel->removeSheetByIndex($index); // 刪除當前表單 $index = $excel->getIndex($excel->getActiveSheet()); $excel->removeSheetByIndex($index);單元操作
單元是承載內容的主體,其上操作比較復雜,大部分的類和API都與單元相關。單元隸屬于具體的表單,使用上和表單類互動最多。
常用操作的包括定位、取值/賦值、格式化等。下面是一些代碼示例:
// 獲取單元對象 $cell = $sheet->getCell("B1"); $cell = $sheet->getCellByColumnAndRow(1, 1); // 取值 $value = $cell->getValue(); $value = $cell->getCalculatedValue(); // 獲取計算后的值 $style = $cell->getStyle(); // 獲取格式化對象 $isMerged = $cell->isMergeRangeValueCell(); //是否是合并單元的主單元(合并單元的左上角單元) // 設置值 $sheet->setCellValue("B1", "TEST"); $sheet->setCellValueByColumnAndRow(1, 1, "TEST"); // 批量賦值 $data = [ [2009, 2010, 2011, 2012], ["Q1", 12, 15, 21], ["Q2", 56, 73, 86], ["Q3", 52, 61, 69], ["Q4", 30, 32, 0], ]; $sheet->fromArray($data); $cell->setValue("foo"); // 顯示賦值 $cell->setValueExplicit("123456788900", PHPExcel_Cell_DataType::TYPE_STRING); // 合并單元 $sheet->mergeCells("A18:E22"); // 設置格式 // 設置字體為紅色 $cell->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED); // 設置邊框 $cell->getStyle()->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);文件屬性
設置excel文件的屬性,包括常見的作者、標題、創建時間、描述等。該功能由PHPExcel中類型為DocumentProperties的成員變量負責:
$property = $excel->getProperties(); $property->setCreator("tlanyan"); $property->setTitle("demo workbook"); $property->setKeywords("tlanyan, PHPExcel");其他
上述介紹了常見的概念和操作,實際中可能會用到的概念還包括:
緩存和性能
圖像、圖表、超鏈接等富文本
日期、貨幣等格式化和本地化
公式設置
打印屬性設置
內容對其、邊距設置等
文件密碼安全設置
這些冷門或高級功能可以參照API文檔。
PHPExcel官方文檔可能稍有繁雜,網絡上的二手資料在深入方面常有欠缺。要用好PHPExcel,一個基本功是搞清楚操作的對象,以及和其他類/對象的關系(這也是面向對象編程的基本功)。本文中提到的PHPExcel->PHPExcel_WorkSheet->PHPExcel_Cell繼承體系,是使用過程中操作最為頻繁的對象,希望以上說明和示例能加深讀者對PHPExcel類庫的理解。
參考https://github.com/PHPOffice/...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/28215.html
摘要:前言是一個純類庫,它提供了一組類,允許您從不同的電子表格文件格式如和讀取和寫入。官方文檔安裝的環境要求或者更高,,組件安裝使用執行命令安裝依賴版本號執行完命令后會在目錄下發現有了目錄,代表已經下載安裝成功。 前言 PhpSpreadsheet是一個純PHP類庫,它提供了一組類,允許您從不同的電子表格文件格式(如Excel和LibreOffice Calc)讀取和寫入。 還有一種類似的...
摘要:能不能單獨設置某個單元格的值這個目前并沒有實現,現在數據的寫入都是逐行寫入的,不支持這么細的粒度,不過折中的做法是把不需要填充的單元格寫入即可如果有什么使用問題,可以在下面留言,一起探討使用方式 二者有何區別? PHPExcel 是一個處理Excel,CVS文件的開源框架,它基于微軟的OpenXML標準和PHP語言??梢允褂盟鼇碜x取、寫入不同格式的電子表格,這也是PHP至今最通用的Ex...
摘要:過去工作中使用較多,碰到并解決了各種大大小小的問題,總結出這樣一篇文章,一方面記錄自己踩過的坑,一方面與大家分享,讓大家少走彎路,并不斷完善之,歡迎大家去上面和提交,不斷補充和優化,打造最全面的開發解決方案地址原文地址基礎小試牛刀引用文 過去工作中使用PHPExcel較多,碰到并解決了各種大大小小的問題,總結出這樣一篇文章,一方面記錄自己踩過的坑,一方面與大家分享,讓大家少走彎路,并不...
摘要:本篇文章主要講述,如何在中使用中導出文件,是博主在實踐了好多篇別人的帖子之后,總結歸納出來的文章,親測可用。我的博客歡迎騷擾原文地址用導出文件。將文件,重命名成。文章結束,歡迎轉載。 本篇文章主要講述,如何在thinkPHP中使用PHPExcel中導出Excel文件,是博主在實踐了好多篇別人的帖子之后,總結歸納出來的文章,親測可用。thinkPHP版本是3.2。 我的博客:Mine-...
摘要:上傳添加需下載類文件,引入到項目類庫里接收前臺文件,接收前臺文件重設置文件名設置移動路徑表用函數方法返回數組創建一個讀取數據,可用于入庫引用類靜態類設置為代表支持或以下版本,代表版開始讀取上傳到服務器中的文件,返回一個二維數組 1.上傳添加excel (需下載PHPExcel類文件,引入到項目類庫里) //接收前臺文件, public function addExcel() ...
閱讀 3093·2023-04-26 00:53
閱讀 3544·2021-11-19 09:58
閱讀 1705·2021-09-29 09:35
閱讀 3302·2021-09-28 09:46
閱讀 3875·2021-09-22 15:38
閱讀 2700·2019-08-30 15:55
閱讀 3022·2019-08-23 14:10
閱讀 3837·2019-08-22 18:17