摘要:要求,使用了名字空間編碼規(guī)范最新的語言新特性對版本的要求加強。已經(jīng)放出穩(wěn)定版,官方不再建議使用。保存和導(dǎo)入的行為分別由和負責。注意不要混淆和對象持有數(shù)據(jù),和是對其進行序列化和反序列化的輔助類。單元隸屬于具體的表單,使用上和表單類互動最多。
轉(zhuǎn)載請注明文章出處:https://tlanyan.me/use-phpexc...
PHPOffice出品的PHPExcel是PHP讀取和生成Excel的極佳工具。本文參考官方文檔,對PHPExcel進行簡要總結(jié),希望對使用PHPExcel操作Excel的同行有幫助。
PHPExcel介紹PHPExcel是用PHP實現(xiàn)的電子表格文檔讀寫類庫,其支持的文檔類型包括:Excel(.xls)后綴,Excel 2007(.xlsx后綴),CSV(.csv后綴),LibreOffice Calc(.ods后綴),PDF和HTML等格式(某些格式只能讀)。PHPExcel運行環(huán)境為PHP 5.2+,需要開啟php_zip、php_xml和php_gd2拓展。
細心的讀者可能看到PHPOffice有另外一款作品:PHPSpreadsheet。PHPSpreadsheet也是一個Excel讀寫類庫,與PHPExcel主要區(qū)別是:
PHPSpreadsheet是PHPExcel的重構(gòu)版,基于PHP的新特性進行了重寫。PHPSpreadsheet要求PHP 5.6+,使用了名字空間、PSR2編碼規(guī)范、最新的PHP語言新特性;
對PHP版本的要求加強。官方的PHP版本支持結(jié)束后,PHPSpreadsheet對該版本至多額外支持6個月(意味肯定不支持PHP 5.5及以下版本,PHP5.6的支持也即將終止)。對比之下,PHPExcel依然支持PHP 5.2.0;
開發(fā)組已將所有資源轉(zhuǎn)移到PHPSpreadsheet,PHPExcel的維護已經(jīng)停止。
PHPSpreadsheet已經(jīng)放出1.0.0穩(wěn)定版,官方不再建議使用PHPExcel。本文內(nèi)容主要講解PHPExcel,掌握透徹后再轉(zhuǎn)換到PHPSpreadsheet也是很容易的。
PHPExcel架構(gòu)理解PHPExcel的架構(gòu),可以先從理解Excel文件的結(jié)構(gòu)開始。一個Excel文件包含多個表單,每個表單包含多個單元;文件、表單和單元都可以多帶帶設(shè)置屬性。這些概念對應(yīng)到PHPExcel中的類,關(guān)系如下:
PHPExcel類 < -> Excel文件
PHPExcel_Worksheet類 < -> 表單
PHPExcel_Cell < -> 單元
PHPExcel_DocumentProperties < -> 文件屬性
PHPExcel_Style_* < -> 格式設(shè)置類
下面開始介紹PHPExcel的常用操作。
使用PHPExcel根據(jù)上面介紹的關(guān)系,分excel文件、表單、單元、格式設(shè)置四個部分分別介紹PHPExcel的使用方法。
excel文件一個PHPExcel類的實例代表一個excel文件。新生成的PHPExcel對象,經(jīng)常需要保存為文件;反之excel文件常需要導(dǎo)入為PHPExcel實例。保存和導(dǎo)入的行為分別由writer和reader負責。為了正確導(dǎo)入和保存數(shù)據(jù),reader和writer需要知道具體的文件格式。PHPExcel提供了工廠類PHPExcel_IOFactory簡化reader和writer的創(chuàng)建。讀寫文件的示例代碼如下:
// 讀取文件,自動探測文件格式 $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類可以參考下圖:
建議使用工廠方法讀取文件,它能自動探測文件格式并加載。這在讀取用戶上傳不同格式的文件時很有用,避免了格式與后綴名不符可能導(dǎo)致的錯誤。
注意不要混淆PHPExcel和writer/reader對象:PHPExcel持有數(shù)據(jù),writer和reader是對其進行序列化和反序列化的輔助類。
表單操作一個excel文件可以包含多個表單,常用操作包括讀取、新建、復(fù)制和刪除表單。表單從屬于excel文件,一般需要掛載到具體的PHPExcel對象上。
獲取表單的方式有多種,如獲取當前表單、獲取指定順序表單、根據(jù)名字獲取表單。以下是示例代碼:
$sheet = $excel->getActiveSheet(); // 獲取第二個表單,編號從0開始 $sheet = $excel->getSheet(1); $sheet = $excel->getSheetByName("Worksheet 1");
創(chuàng)建表單分為直接excel文件對象直接創(chuàng)建,也可以先創(chuàng)建表單實例,后續(xù)再關(guān)聯(lián)。對應(yīng)方法為:
$excel->createSheet(); $sheet = new PHPExcel_Worksheet($excel, "sheet 1"); // 一些其他操作 // 作為第二個表單插入到文檔中 $excel->addSheet($sheet, 1);
PHPExcel也支持復(fù)制表單(包括復(fù)制其他PHPExcel對象中的表單):
// 復(fù)制表單 $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);單元操作
單元是承載內(nèi)容的主體,其上操作比較復(fù)雜,大部分的類和API都與單元相關(guān)。單元隸屬于具體的表單,使用上和表單類互動最多。
常用操作的包括定位、取值/賦值、格式化等。下面是一些代碼示例:
// 獲取單元對象 $cell = $sheet->getCell("B1"); $cell = $sheet->getCellByColumnAndRow(1, 1); // 取值 $value = $cell->getValue(); $value = $cell->getCalculatedValue(); // 獲取計算后的值 $style = $cell->getStyle(); // 獲取格式化對象 $isMerged = $cell->isMergeRangeValueCell(); //是否是合并單元的主單元(合并單元的左上角單元) // 設(shè)置值 $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"); // 設(shè)置格式 // 設(shè)置字體為紅色 $cell->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED); // 設(shè)置邊框 $cell->getStyle()->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);文件屬性
設(shè)置excel文件的屬性,包括常見的作者、標題、創(chuàng)建時間、描述等。該功能由PHPExcel中類型為DocumentProperties的成員變量負責:
$property = $excel->getProperties(); $property->setCreator("tlanyan"); $property->setTitle("demo workbook"); $property->setKeywords("tlanyan, PHPExcel");其他
上述介紹了常見的概念和操作,實際中可能會用到的概念還包括:
緩存和性能
圖像、圖表、超鏈接等富文本
日期、貨幣等格式化和本地化
公式設(shè)置
打印屬性設(shè)置
內(nèi)容對其、邊距設(shè)置等
文件密碼安全設(shè)置
這些冷門或高級功能可以參照API文檔。
PHPExcel官方文檔可能稍有繁雜,網(wǎng)絡(luò)上的二手資料在深入方面常有欠缺。要用好PHPExcel,一個基本功是搞清楚操作的對象,以及和其他類/對象的關(guān)系(這也是面向?qū)ο缶幊痰幕竟Γ?。本文中提到的PHPExcel->PHPExcel_WorkSheet->PHPExcel_Cell繼承體系,是使用過程中操作最為頻繁的對象,希望以上說明和示例能加深讀者對PHPExcel類庫的理解。
參考https://github.com/PHPOffice/...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28215.html
摘要:前言是一個純類庫,它提供了一組類,允許您從不同的電子表格文件格式如和讀取和寫入。官方文檔安裝的環(huán)境要求或者更高,,組件安裝使用執(zhí)行命令安裝依賴版本號執(zhí)行完命令后會在目錄下發(fā)現(xiàn)有了目錄,代表已經(jīng)下載安裝成功。 前言 PhpSpreadsheet是一個純PHP類庫,它提供了一組類,允許您從不同的電子表格文件格式(如Excel和LibreOffice Calc)讀取和寫入。 還有一種類似的...
摘要:能不能單獨設(shè)置某個單元格的值這個目前并沒有實現(xiàn),現(xiàn)在數(shù)據(jù)的寫入都是逐行寫入的,不支持這么細的粒度,不過折中的做法是把不需要填充的單元格寫入即可如果有什么使用問題,可以在下面留言,一起探討使用方式 二者有何區(qū)別? PHPExcel 是一個處理Excel,CVS文件的開源框架,它基于微軟的OpenXML標準和PHP語言??梢允褂盟鼇碜x取、寫入不同格式的電子表格,這也是PHP至今最通用的Ex...
摘要:過去工作中使用較多,碰到并解決了各種大大小小的問題,總結(jié)出這樣一篇文章,一方面記錄自己踩過的坑,一方面與大家分享,讓大家少走彎路,并不斷完善之,歡迎大家去上面和提交,不斷補充和優(yōu)化,打造最全面的開發(fā)解決方案地址原文地址基礎(chǔ)小試牛刀引用文 過去工作中使用PHPExcel較多,碰到并解決了各種大大小小的問題,總結(jié)出這樣一篇文章,一方面記錄自己踩過的坑,一方面與大家分享,讓大家少走彎路,并不...
摘要:本篇文章主要講述,如何在中使用中導(dǎo)出文件,是博主在實踐了好多篇別人的帖子之后,總結(jié)歸納出來的文章,親測可用。我的博客歡迎騷擾原文地址用導(dǎo)出文件。將文件,重命名成。文章結(jié)束,歡迎轉(zhuǎn)載。 本篇文章主要講述,如何在thinkPHP中使用PHPExcel中導(dǎo)出Excel文件,是博主在實踐了好多篇別人的帖子之后,總結(jié)歸納出來的文章,親測可用。thinkPHP版本是3.2。 我的博客:Mine-...
摘要:上傳添加需下載類文件,引入到項目類庫里接收前臺文件,接收前臺文件重設(shè)置文件名設(shè)置移動路徑表用函數(shù)方法返回數(shù)組創(chuàng)建一個讀取數(shù)據(jù),可用于入庫引用類靜態(tài)類設(shè)置為代表支持或以下版本,代表版開始讀取上傳到服務(wù)器中的文件,返回一個二維數(shù)組 1.上傳添加excel (需下載PHPExcel類文件,引入到項目類庫里) //接收前臺文件, public function addExcel() ...
閱讀 3119·2023-04-26 00:53
閱讀 3570·2021-11-19 09:58
閱讀 1728·2021-09-29 09:35
閱讀 3330·2021-09-28 09:46
閱讀 3898·2021-09-22 15:38
閱讀 2720·2019-08-30 15:55
閱讀 3044·2019-08-23 14:10
閱讀 3855·2019-08-22 18:17