2016年8月18日12:45:14 php
請注意這個是粗翻譯版,僅供參考,不是精校版 精校版後面纔會更新
PHPExcel開發者文檔 1.目錄 2. 4先決條件 2.1。軟件要求4 2.2。安裝說明4 2.3。入門4 2.4。有用的連接和工具4 2.4.1。的OpenXML / SpreadsheetML中4 2.4.2。常見問題5 2.4.3。 6教程 3.建築7 3.1。 7示意性 3.2。延遲加載器7 3.3。電子表格在內存中7 3.4。讀者和做家7 3.5。流利的接口8 4.建立電子表格10 4.1。該PHPExcel 10級 4.1.1。從文件加載10工做簿 4.1.2。建立一個新的工做簿10 4.2。配置設置10 4.2.1。電池緩存10 4.2.2。語言/區域設置12 4.3。從內存中清除13工做簿 4.4。 13工做表 4.4.1。添加一個新的工做表14 4.4.2。複製工做表14 4.4.3。刪除工做表14 4.5。訪問單元14 4.5.1。經過座標14設置單元格值 4.5.2。經過座標15檢索細胞 4.5.3。經過行和列15設置單元格值 4.5.4。由列和行15檢索細胞 4.5.5。循環單元15 4.5.6。使用值粘合劑,以方便數據錄入16 4.6。 PHPExcel 17食譜 4.6.1。設置電子表格的元數據17 4.6.2。設置電子表格的活動板17 4.6.3。寫日期或時間到單元格17 4.6.4。寫了公式的單元格18 4.6.5。對式19區域設置 4.6.6。寫在單元格中換行字符「\ n」(ALT +「回車」)20
4.6.7。明確設置單元格的數據類型20 4.6.8。一個細胞變成可點擊的URL 20
4.6.9。設置工做表的頁面方向和大小20 4.6.10。頁面設置:縮放選項21 4.6.11。頁邊距22 4.6.12。水平中心頁/垂直22 4.6.13。設置工做表22的打印頁眉和頁腳 4.6.14。在一行或一列24設定打印中斷 4.6.15。打印時24顯示/隱藏網格線 4.6.16。設置行/列頂部重複/左24 4.6.17。指定印刷面積24 4.6.18。設置單元格24 4.6.19。數字格式26 4.6.20。校準和自動換行26 4.6.21。設置一個工做簿27的默認樣式 4.6.22。造型單元格邊框27 4.6.23。條件格式的單元格28 4.6.24。註釋添加到單元格28 4.6.25。應用自動篩選單元格區域29 4.6.26。在電子表格29設置安全 4.6.27。在電池30設置數據驗證 4.6.28。設置列寬30 29年4月6日。顯示/隱藏列31 4.6.30。集團/勾勒出列31 31年4月6日。設置行高31 4.6.32。顯示/隱藏行31 33年4月6日。集團/勾勒出一個排32 34年4月6日。合併/分開單元32 35年4月6日。插入行/列32 36年4月6日。圖形添加到工做表32 37年4月6日。從表33讀取圖片 38年4月6日。豐富的文本添加到一個小區34 39年4月6日。定義一個名爲範圍34 40年4月6日。輸出重定向到客戶端的Web瀏覽器34 41年4月6日。設置默認列寬35 42年4月6日。設置默認行高35 43年4月6日。添加GD繪圖到工做表35 44年4月6日。設置工做表的縮放級別36 45年4月6日。工做表標籤顏色36 46年4月6日。在工做簿中建立36工做表 47年4月6日。隱藏的工做表(表州)36 48年4月6日。從右到左的工做表36 5.執行公式計算37 5.1。使用PHPExcel計算引擎37 5.2。已知限制38 5.2.1。運算符優先級38 5.2.2。涉及數字和文本38公式 6.讀取和寫入到文件39 6.1。 PHPExcel_IOFactory 39
6.1.1。使用PHPExcel_IOFactory 39建立PHPExcel_Reader_IReader 6.1.2。使用PHPExcel_IOFactory 39建立PHPExcel_Writer_IWriter 6.2。 Excel 2007中(SpreadsheetML中)文件格式39 6.2.1。 PHPExcel_Reader_Excel2007 40
6.2.2。 PHPExcel_Writer_Excel2007 40
6.3。 Excel中5(BIFF)文件格式41 6.3.1。 PHPExcel_Reader_Excel5 41
6.3.2。 PHPExcel_Writer_Excel5 42
6.4。 Excel 2003中的XML文件格式42 6.4.1。 PHPExcel_Reader_Excel2003XML 42
6.5。符號連接(SYLK)43
6.5.1。 PHPExcel_Reader_SYLK 43
6.6。打開/自由辦公室(的.ods)43
6.6.1。 PHPExcel_Reader_OOCalc 43
6.7。 CSV(逗號分隔值)44
6.7.1。 PHPExcel_Reader_CSV 44
6.7.2。 PHPExcel_Writer_CSV 45
6.8。 HTML 46
6.8.1。 PHPExcel_Reader_HTML 46
6.8.2。 PHPExcel_Writer_HTML 46
6.9。 PDF 47
6.9.1。 PHPExcel_Writer_PDF 47
6.10。從模板(讀取,修改,寫)49生成Excel文件 7.現金50 附錄A:風格applyFromArray有效的數組鍵()51
2.先決條件 2.1。軟件要求 下列軟件須要使用PHPExcel擴展: »PHP版本5.2.0或更高版本 »PHP擴展php_zip啓用*) »PHP擴展php_xml啓用 »PHP擴展php_gd2啓用(若是沒有編譯) php_zip僅由PHPExcel_Reader_Excel2007,PHPExcel_Writer_Excel2007和PHPExcel_Reader_OOCalc須要的。換句話說,若是你須要PHPExcel處理的.xlsx或.ods檔案文件,你須要壓縮擴展,但不然不是。 您能夠刪除此依賴寫的Excel2007文件(儘管尚未讀)經過使用捆綁PHPExcel的PCLZip庫。請參閱本文檔(2.4.2)有關此信息的FAQ部分。 PCLZip確實有被啓用了PHP的zlib的擴展的依賴。 2.2。安裝說明 安裝是很容易的:Classes文件夾中的內容複製到你的應用程序源目錄中的任何位置。 例: 若是您的Web根目錄是/ var / WWW /你可能要建立一個名爲/ var / WWW /類子/和文件複製到該文件夾,因此你最終得到的文件: /var/www/Classes/PHPExcel.php /var/www/Classes/PHPExcel/Calculation.php /var/www/Classes/PHPExcel/Cell.php 2.3。入門 上手的好方法是運行一些包括在下載的測試。 「Examples」文件夾複製旁邊的「類」Classes,因此你最終得到的文件夾: /var/www/ Examples/01simple.php /var/www/ Examples/02types.php 啓動您的瀏覽器指向測試腳本運行測試 http://example.com/ Examples/01simple.php
http://example.com/ Examples/02types.php
注意:可能須要修改包括/須要在每一個測試腳本若是從上方的「類」的文件夾被不一樣地命名的開始語句。 2.4。有用的連接和工具 還有一些連接和工具使用PHPExcel開發時,這是很是有用的。請參考PHPExcel CodePlex上頁爲下面的列表的更新版本。 2.4.1。的OpenXML / SpreadsheetML中 »文件格式的文檔 http://www.ecma-international.org/news/TC45_current_work/TC45_available_docs.htm
»OpenXML的解釋電子書 http://openxmldeveloper.org/articles/1970.aspx
»Microsoft Office兼容包的Word,Excel和PowerPoint 2007文件格式 http://www.microsoft.com/downloads/details.aspx?familyid=941b3470-3ae9-4aee-8f43-c6bb74cd1466&displaylang=en
»OpenXML的包瀏覽器 http://www.codeplex.com/PackageExplorer/
2.4.2。常常問的問題 向上最新F.A.Q.對於PHPExcel頁面能夠http://www.codeplex.com/PHPExcel/Wiki/View.aspx?title=FAQ&referringTitle=Requirements找到。
彷佛有與字符編碼問題... 它必須使用UTF-8編碼的PHPExcel全部文本。若是腳本使用不一樣的編碼方式,那麼你能夠將PHP的的iconv()或mb_convert_encoding()函數的文本。 PHP抱怨ZipArchive未找到 確保您知足全部要求,尤爲是php_zip擴展應該啓用 讀取或寫入使用Zip壓縮(Excel2007中和oocalc裏)格式時,ZipArchive類時才須要。由於1.7.6版本PCLZip庫已經捆綁PHPExcel做爲替代ZipArchive類。 這能夠經過調用啓用: PHPExcel_Settings :: setZipClass(PHPExcel_Settings :: PCLZIP); 以前調用Excel2007中做家的保存方法。 您能夠恢復使用ZipArchive致電: PHPExcel_Settings :: setZipClass(PHPExcel_Settings :: ZIPARCHIVE); 目前,這種只容許你寫的Excel2007文件,而不須要ZipArchive(不讀的Excel2007或oocalc裏) Excel 2007中沒法打開經過PHPExcel_Writer_2007在Windows上生成的文件 「創先爭優發現'*的.xlsx」沒法讀取內容。你想恢復此工做簿的內容?若是您信任該工做簿的來源,請單擊是。「 建立ZIP文件時,某些舊版本的Windows上的5.2.x php_zip擴展包含一個錯誤。可在http://snaps.php.net/win32/php5.2-win32-latest.zip找到的版本應該在任什麼時候候都工做。 此外,升級到至少5.2.9 PHP應該解決的問題。 若是你沒法找到ZipArchive的全新副本,那麼你就能夠寫的Excel2007文件時,如上所述使用PCLZip庫做爲替代。 致命錯誤:用盡XXX字節容許內存大小(試圖分配YYY字節)ZZZ在線AAA PHPExcel持有電子表格的「內存」的顯示,因此它是由PHP的內存限制的約束。提供給PHP內存能夠提升編輯您的php.ini文件中memory_limit的指令的值,或使用的ini_set('memory_limit的','128M')你的代碼中(ISP許可)。 一些讀者和做家比別人快,他們也使用的內存量不一樣。你能夠找到的相對性能和內存使用爲不一樣的讀者和做家的一些跡象代表,在不一樣版本的PHPExcel,在討論板。 若是您已經增長了內存到最大,仍是不能改變你的內存限制,那麼在董事會的討論描述了一些可用於減小使用PHPExcel腳本的內存使用的方法。 保護個人工做不工做? 當你使用任何的工做表保護功能(例如,小區範圍內的保護,禁止刪除行,...),請確保您啓用工做表的安全性。這能夠例如進行這樣的: $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); 特徵X不是與PHPExcel_Reader_Y / PHPExcel_Writer_Z工做 並不是PHPExcel的全部功能在全部的讀/寫器類中實現的。這主要是因爲底層庫不支持特定的功能,或者不執行有一個特定的功能。 例如自動篩選不在PEAR Spreadsheet_Excel_writer,這是咱們Excel5做家的基礎上實現的。 咱們正在逐步創建的功能列表,用不一樣的讀者和做家來支持他們在一塊兒,在/文檔文件夾中的「功能交叉Reference.xls」文件。 彷佛公式不使用兼容包在Excel2003中計算? 這是兼容包的正常行爲,Excel2007中正確顯示這一點。使用PHPExcel_Writer_Excel5若是你真的須要計算值,或力Excel2003中從新計算。 設置列寬是否是100%準確 試圖設置列寬,我遇到一個問題。當我在Excel中打開文件時,實際寬度爲0.71低於它應該是。 簡短的回答是,PHPExcel使用,其中包括填充的措施。請參見:「設置列寬」的更多細節。 如何使用PHPExcel與個人框架 »有關於Joomla的留言板上使用PHPExcel與Joomla一些指令 »諮詢頁面上的Yii框架使用PHPExcel »麪包店有必定的輔助類的閱讀和內與CakePHP的寫做PHPExcel »集成PHPExcel到Kohana的http://www.flynsarmy.com/2010/07/phpexcel-module-for-kohana-3/和ИнтеграцияPHPExcelиKohana的框架 »使用PHPExcel用TYPO3 自動加載的Joomla干擾PHPExcel自動裝彈機 因爲peterrlynch針對如下意見的PHPExcel自動加載機和Joomla自動加載磁帶機之間解決問題 2.4.3。教程 »英語PHPExcel教程 http://openxmldeveloper.org »法國PHPExcel教程 http://g-ernaelsten.developpez.com/tutoriels/excel2007/ »俄羅斯PHPExcel博客文章 http://www.web-junior.net/sozdanie-excel-fajjlov-s-pomoshhyu-phpexcel/ »在日語介紹PHPExcel http://journal.mycom.co.jp/articles/2009/03/06/phpexcel/index.html 3.體系結構 3.1。概要 3.2。延遲加載器 PHPExcel實現一個自動裝載機或「懶惰裝載機」,這意味着它是沒必要要的,包括內PHPExcel每一個文件。它是隻須要包括初始PHPExcel類文件,而後自動加載器將包括其餘類文件有須要時, 因此只有那些其實是由你的腳本須要這些文件將被加載到內存中的PHP。這樣作的主要好處是,它減小了PHPExcel自己的內存佔用,所以,它使用較少的內存PHP。 若是本身的腳本已經定義了一個自動加載功能,那麼這多是由PHPExcel自動加載功能覆蓋。例如,若是您有: function __autoload($class) { ... } Do this instead: function myAutoload($class) { ... } spl_autoload_register('myAutoload'); 自動加載機將而後PHPExcel自動加載機並存。 3.3。電子表格在內存 PHPExcel的結構是創建在一種方式,它可做爲一個內存中的電子表格。這意味着,若是一我的會想建立一個與PHPExcel的對象模型進行通訊的電子表格的基於Web的見解,他將只須要編寫前端代碼。 就像桌面電子表格軟件,PHPExcel表示含有一個或多個表,其中包含與數據,公式,圖像的細胞的電子表格,... 3.4。讀者和做家 就其自己而言PHPExcel不提供的功能從讀取或寫入到一個持久的電子表格(在磁盤上或在數據庫中)。爲了提供該功能,閱讀器和可使用做家。 默認狀況下,PHPExcel包提供了一些讀者和做家,包括一個用於Open XML電子表格格式(又名Excel 2007文件格式)。 你是否是僅限於默認的讀者和做者,由於你能夠自由地實現自定義類的PHPExcel_Writer_IReader和PHPExcel_Writer_IWriter接口 3.5。流利的接口 PHPExcel支持大多數地區的流暢接口。這意味着你能夠很容易地「產業鏈」,而不須要一個新的PHP語句調用特定的方法。例如,如下面的代碼: $objPHPExcel->getProperties()->setCreator("Maarten Balliauw"); $objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw"); $objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document"); $objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document"); $objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes."); $objPHPExcel->getProperties()->setKeywords("office 2007 openxml php"); $objPHPExcel->getProperties()->setCategory("Test result file"); 這能夠被改寫爲: $objPHPExcel->getProperties() ->setCreator("Maarten Balliauw") ->setLastModifiedBy("Maarten Balliauw") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") ->setKeywords("office 2007 openxml php") ->setCategory("Test result file"); 使用流利的接口並不須要 流利的接口已經實施提供了方便的編程API。它們的使用不是必需的,但可讓你的代碼更易於閱讀和維護。它也能夠提升性能,由於你是減小調用PHPExcel方法的總數量。 至於爲何翻譯成"流利的接口"這個翻譯並很差,目前沒有找到比較好的翻譯,後面更新 4.建立電子表格 4.1。該PHPExcel類 該PHPExcel類是PHPExcel的核心。它包含的工做表所載,文檔的安全性設置,引用和文件元數據。 爲了簡化PHPExcel概念:PHPExcel類表明工做簿。 一般狀況下,你會在如下兩種方式之一,不管是從電子表格文件加載它,或手動建立它建立一個工做簿。第三個選擇,雖然不經常使用,被克隆已使用前兩種方法之一建立的現有工做簿。 4.1.1。從文件加載工做簿 提供給他們讀入PHPExcel對象所支持的不一樣的電子表格格式和選項的詳細信息將在充分說明「PHPExcel用戶文檔 - 讀電子表格文件」的文件。 $inputFileName = './sampleData/example1.xls'; /** Load $inputFileName to a PHPExcel Object **/ $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); 4.1.2。建立一個新的工做簿 若是你想建立一個新的工做簿,而不是裝載一個來自文件,而後你只須要實例化它做爲一個新的PHPExcel對象。 / **建立一個新的PHPExcel對象** / $ objPHPExcel =新PHPExcel(); 新工做簿老是會用一個工做表中建立。 4.2。配置設置 一旦你已經包含在腳本中的PHPExcel文件,但實例化一個對象PHPExcel或加載工做簿文件以前,有一些可設置的配置選項,這將影響到腳本的後續行爲。 4.2.1。細胞緩存 PHPExcel使用大約1K /單元的平均工做表中的,那麼大的工做簿會很快用完可用內存。細胞緩存提供了一種機制,容許PHPExcel保持的存儲器中的較小尺寸的單元的對象,在磁盤上,或在APC,內存緩存或WINCACHE,而不是在PHP存儲器。這使您能夠減小大量的工做簿的內存使用量,雖然以速度爲代價來訪問單元格數據。 默認狀況下,PHPExcel仍持有內存中的全部單元格對象,但您能夠指定替代方案。爲了使細胞緩存,必須調用PHPExcel_Settings :: setCacheStorageMethod()方法,傳遞您但願使用高速緩存方法。 $ cacheMethod = PHPExcel_CachedObjectStorageFactory :: cache_in_memory; PHPExcel_Settings :: setCacheStorageMethod($ cacheMethod); setCacheStorageMethod()將(若是試圖未啓用時APC緩存,以APC爲例)返回成功一個布爾值真,假失敗。 一個單獨的緩存保持每一個工做表,在工做表的基礎上的高速緩存方法和設置您已經配置實例化時自動建立。一旦你開始讀一工做簿或已經建立了第一個工做表,不能更改配置設置。 目前,如下高速緩存方法是可用的。 PHPExcel_CachedObjectStorageFactory :: cache_in_memory; 默認。若是不初始化任何高速緩存的方法,則這是PHPExcel將使用的方法。 Cell對象保持在PHP內存截至目前。 PHPExcel_CachedObjectStorageFactory :: cache_in_memory_serialized; 使用這種高速緩存方法,將細胞在PHP存儲器保持爲序列化對象的陣列,從而下降了以最小的性能開銷的存儲器佔用。 PHPExcel_CachedObjectStorageFactory :: cache_in_memory_gzip; 像cache_in_memory_serialized,此方法包含在PHP存儲單元做爲序列化對象的陣列,但gzip壓縮以減小存儲器的使用仍進一步,雖然訪問讀或寫一個單元是稍微慢一些。 PHPExcel_CachedObjectStorageFactory :: cache_igbinary; 使用PHP的igbinary擴展名(若是可用)將序列號存儲單元的對象。這一般是速度更快,使用比標準的PHP序列化更少的內存,但在大多數主機環境提供。 PHPExcel_CachedObjectStorageFactory :: cache_to_discISAM; 當使用cache_to_discISAM全部單元都在一個臨時磁盤文件舉行,只有一個索引到它們的位置中保持在PHP存儲器該文件。這比任何的cache_in_memory方法慢,可是顯著減小了存儲器佔用。默認狀況下,將PHPExcel使用PHP的臨時目錄緩存文件,但你能夠初始化cache_to_discISAM時指定一個不一樣的目錄。 $ cacheMethod = PHPExcel_CachedObjectStorageFactory :: cache_to_discISAM; $cacheSettings = array( 'dir' => '/usr/local/tmp' ); PHPExcel_Settings :: setCacheStorageMethod($ cacheMethod,$ cacheSettings); 當你的腳本終止臨時磁盤文件被自動刪除。 PHPExcel_CachedObjectStorageFactory :: cache_to_phpTemp; 像cache_to_discISAM,使用cache_to_phpTemp當全部的細胞都保持在php://臨時I / O流,只有一個索引來保持在PHP的內存其位置。在PHP,PHP的:在存儲器//存儲器封裝存儲數據:PHP://溫度行爲相似,但使用的臨時文件存儲中的數據達到必定存儲器限制時。默認值是1 MB,但初始化cache_to_phpTemp時,你能夠改變這一點。 $ cacheMethod = PHPExcel_CachedObjectStorageFactory :: cache_to_phpTemp; $cacheSettings = array( 'memoryCacheSize' => '8MB' ); PHPExcel_Settings :: setCacheStorageMethod($ cacheMethod,$ cacheSettings); PHP的:當你的腳本終止//臨時文件被自動刪除。 PHPExcel_CachedObjectStorageFactory :: cache_to_apc; 當使用cache_to_apc,細胞的對象被保持在APC與只在PHP存儲器保持以肯定細胞存在的指標。缺省狀況下,600秒的APC緩存超時使用時,應該是足夠對於大多數應用:雖然有可能初始化cache_to_APC當改變這一點。 $ cacheMethod = PHPExcel_CachedObjectStorageFactory :: cache_to_APC; $cacheSettings = array( 'cacheTime' => 600 ); PHPExcel_Settings :: setCacheStorageMethod($ cacheMethod,$ cacheSettings); 當腳本終止全部條目未來自APC被清除,而無論cacheTime值的,所以,使用這個機制,它不能被用於持久存儲。 PHPExcel_CachedObjectStorageFactory :: cache_to_memcache 當使用cache_to_memcache,細胞的對象被保持在內存緩存僅在PHP存儲器保持以肯定細胞存在的指標。 默認狀況下,PHPExcel查找本地主機上一個內存緩存服務器在端口11211.它還設置爲600秒內存緩存超時限制。若是您在不一樣的服務器或端口上運行的memcache,那麼您能夠在初始化cache_to_memcache修改這些默認值: $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache; $cacheSettings = array( 'memcacheServer' => 'localhost', 'memcachePort' => 11211, 'cacheTime' => 600 ); PHPExcel_Settings :: setCacheStorageMethod($ cacheMethod,$ cacheSettings); 當腳本終止全部條目將從記憶快取被清除,而無論cacheTime值的,所以,使用這個機制,它不能被用於持久存儲。 PHPExcel_CachedObjectStorageFactory :: cache_to_wincache; 當使用cache_to_wincache,細胞的對象被保持在WINCACHE僅在PHP存儲器保持以肯定細胞存在的指標。缺省狀況下,600秒WINCACHE緩存超時使用時,應該是足夠對於大多數應用:雖然有可能初始化cache_to_wincache當改變這一點。 $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_wincache; $cacheSettings = array( 'cacheTime' => 600 ); PHPExcel_Settings :: setCacheStorageMethod($ cacheMethod,$ cacheSettings); 當腳本終止全部條目將從WINCACHE被清除,而無論cacheTime值的,所以,使用這個機制,它不能被用於持久存儲。 PHPExcel_CachedObjectStorageFactory :: cache_to_sqlite; 使用一個SQLite 2內存數據庫緩存單元格數據。不像其餘的高速緩存方法,既不是細胞,也不是指數保持在PHP的內存 - 索引數據庫表,就沒有必要持有PHP內存中的任何指標 - 使這個最內存效率的電池高速緩存方法。 PHPExcel_CachedObjectStorageFactory :: cache_to_sqlite3; 使用一個SQLite 3內存數據庫緩存單元格數據。不像其餘的高速緩存方法,既不是細胞,也不是指數保持在PHP的內存 - 索引數據庫表,就沒有必要持有PHP內存中的任何指標 - 使這個最內存效率的電池高速緩存方法。 4.2.2。語言/區域設置 一些本土化元素都被列入PHPExcel。您能夠經過更改設置設置一個區域。以區域設置爲葡萄牙語(巴西),須要使用: $locale = 'pt_br'; $validLocale = PHPExcel_Settings::setLocale($locale); if (!$validLocale) { echo 'Unable to set locale to '.$locale." - reverting to en_us<br />\n"; } 若是巴西葡萄牙語語言文件不可用,那麼葡萄牙將代替啓用:若是葡萄牙語言文件不可用,那麼的setLocale()方法會返回一個錯誤,和美國英語(EN_US)設置將在整個使用。 可用一旦一個區域的功能的更多細節已定,包括語言,目前支持的語言環境的列表,能夠在公式4.5.5節的區域設置來找到。 4.3。清除從內存工做簿 該PHPExcel對象包含循環引用(例如,工做簿連接到工做表和工做表連接到其父母的工做簿),這會致使出現問題時,PHP將試圖從內存中清除的對象時,他們都沒有設置(),或在年末當他們在本地範圍內的功能。這樣作的結果是「內存泄漏」,它能夠很容易地使用大量的PHP有限的內存。 這隻能以手動方式解決:若是您須要取消設置一個工做簿,而後你還須要「破」在這樣作以前,這些循環引用。 PHPExcel爲此提供的disconnectWorksheets()方法。 $objPHPExcel->disconnectWorksheets(); unset($objPHPExcel); 4.4。工做表 有一個工做表單元格,公式的,圖像,圖形的集合,......它擁有必要的表示爲電子表格的工做表的全部數據。 當您從電子表格文件加載的工做簿,將其全部現有工做表被載入(除非指定只有特定的表應該被加載)。當您從非電子表格文件加載(如CSV或HTML文件),或從電子表格格式,不要被名稱(如SYLK)肯定工做表,而後一個名爲「工做表」一個工做表將建立一個包含從數據該文件。 當你實例化一個新的工做簿,PHPExcel將與所謂的「工做表」一個工做表中建立它。 該getSheetCount()方法會告訴你在工做簿的工做表數;而getSheetNames()方法將返回工做簿中的全部工做表,在其中他們的「標籤」將在MS Excel(或其餘適當的電子表格程序)打開時顯示的順序索引列表。 單個的工做表能夠經過名稱來訪問,或經過在工做簿中的索引位置。索引位置表示當工做簿在MS Excel(或其餘適當的電子表格程序)中打開每一個工做表「標籤」顯示的順序。爲了經過它的索引訪問片,使用getSheet()方法。 //獲取工做簿中的第二板 //注意紙張從0索引 $ objPHPExcel-> getSheet(1); 若是不指定表的索引,那麼第一個工做表將被退回。 方法也存在讓您從新排序工做表在工做簿中。 要經過名稱訪問表,使用getSheetByName()方法,指定您要訪問的工做表的名稱。 //得到所謂的「工做表1」工做表 $objPHPExcel->getSheetByName('Worksheet 1'); 另外,一個工做表老是在當前活動工做表,您能夠直接訪問。當前活動工做表是一個當工做簿在MS Excel(或其餘適當的電子表格程序)打開,這將是積極的。 //得到當前活動工做表 $objPHPExcel->getActiveSheet(); 使用此方法建立一個新的工做表將被稱爲「工做表」或「工做表<N>」,其中「<N>」是最低數量能夠保證,標題是獨一無二的。 或者,您能夠實例化一個新的工做表(設爲無論你選擇的名稱),而後將其插入到使用addSheet()方法,您的工做簿。 //建立一個名爲「個人數據」的新的工做表 $myWorkSheet = new PHPExcel_Worksheet($objPHPExcel, 'My Data'); //附加「個人數據」工做做爲PHPExcel對象中的第一個工做表 $objPHPExcel->addSheet($myWorkSheet, 0); 若是不指定爲第二個參數的索引位置,則新的工做表將在最後一個現有工做表後添加。 4.4.2。複製工做表 同一工做簿中的表能夠經過建立要複製工做表的副本,而後使用addSheet()方法插入克隆到工做簿中進行復制。 $objClonedWorksheet = clone $objPHPExcel->getSheetByName('Worksheet 1'); $objClonedWorksheet->setTitle('Copy of Worksheet 1') $objPHPExcel->addSheet($objClonedWorksheet); 在這兩種狀況下,這是開發商的責任,確保工做表名稱不重複。若是您嘗試複製工做表會致使重複名稱PHPExcel會拋出異常。 4.4.3。刪除工做表 您能夠從一個工做簿,其索引位置肯定刪除工做表,使用removeSheetByIndex()方法 $sheetIndex = $objPHPExcel->getIndex($objPHPExcel-> getSheetByName('Worksheet 1')); $objPHPExcel->removeSheetByIndex($sheetIndex); 若是當前活動工做表被刪除,則表在先前索引位置將成爲當前活動工做表。 4.5。訪問單元格 在PHPExcel工做訪問單元應該是很是簡單的。本主題列出了一些選項來訪問一個單元格。 4.5.1。經過設置座標單元格值 經過設置座標單元格值可使用工做表的setCellValue方法來實現。 $objPHPExcel->getActiveSheet()->setCellValue('B8', 'Some value'); 4.5.2。經過檢索協調細胞 檢索的小區的值,細胞應首先從使用getCell方法的工做表中檢索。單元格的值能夠再次使用下面的代碼行閱讀: $objPHPExcel->getActiveSheet()->getCell('B8')->getValue(); 若是你須要一個單元格的計算值,使用下面的代碼。這是在35年4月4日進一步解釋。 $objPHPExcel->getActiveSheet()->getCell('B8')->getCalculatedValue(); 4.5.3。經過行和列設置單元格值 經過設置座標單元格值可使用工做表的setCellValueByColumnAndRow方法來實現。 //設置單元格B8 $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, 8, 'Some value'); 4.5.4。由列和行中檢索的小區 檢索的小區的值,細胞應首先從使用getCellByColumnAndRow方法的工做表中檢索。單元格的值能夠再次使用下面的代碼行閱讀: //獲取小區B8 $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getValue(); 若是你須要一個單元格的計算值,使用下面的代碼。這是在35年4月4日進一步解釋 //獲取小區B8 $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getCalculatedValue(); 4.5.4。由列和行中檢索的小區 檢索的小區的值,細胞應首先從使用getCellByColumnAndRow方法的工做表中檢索。單元格的值能夠再次使用下面的代碼行閱讀: //獲取小區B8 $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getValue(); 若是你須要一個單元格的計算值,使用下面的代碼。這是在35年4月4日進一步解釋 //獲取小區B8 $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getCalculatedValue(); 4.5.4。由列和行中檢索的小區 檢索的小區的值,細胞應首先從使用getCellByColumnAndRow方法的工做表中檢索。單元格的值能夠再次使用下面的代碼行閱讀: //獲取小區B8 $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getValue(); 若是你須要一個單元格的計算值,使用下面的代碼。這是在35年4月4日進一步解釋 //獲取小區B8 $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getCalculatedValue(); 4.5.5。循環細胞 使用迭代器循環細胞 循環細胞的最簡單方法是使用迭代器。使用迭代器,可使用的foreach循環的工做表,行和單元格。 下面是咱們讀到的工做表中全部的值,並在表中顯示它們的例子。 <?php $objReader = PHPExcel_IOFactory::createReader('Excel2007'); $objReader->setReadDataOnly(true); $objPHPExcel = $objReader->load("test.xlsx"); $objWorksheet = $objPHPExcel->getActiveSheet(); echo '<table>' . "\n"; foreach ($objWorksheet->getRowIterator() as $row) { echo '<tr>' . "\n"; $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); // This loops all cells, // even if it is not set. // By default, only cells // that are set will be // iterated. foreach ($cellIterator as $cell) { echo '<td>' . $cell->getValue() . '</td>' . "\n"; } echo '</tr>' . "\n"; } echo '</table>' . "\n"; ?>
請注意,咱們已經設置單元格迭代器的setIterateOnlyExistingCells()爲false。這使得這個循環的全部單元格,即便他們沒有以前設置。html
細胞迭代將返回null做爲細胞若是未在工做表中設定。
設置單元格迭代器的setIterateOnlyExistingCells()設置爲false將循環在工做表中,能夠在那一刻可用的全部單元格。這將須要來建立新的細胞,提升內存的使用!只使用它,若是它被用於循環是可能可用的全部細胞。
使用索引循環細胞
人們可使用的可能性由列和行索引等(0,1)來訪問元值而不是「A1」用於讀取和在循環中寫單元值。前端
注意:在PHPExcel列索引,而行的索引是基於1從零開始。這意味着'A1'〜(0,1)web
下面是咱們讀到的工做表中全部的值,並在表中顯示它們的例子。sql
<?php
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);數據庫
$objPHPExcel = $objReader->load("test.xlsx");
$objWorksheet = $objPHPExcel->getActiveSheet();編程
$highestRow = $objWorksheet->getHighestRow(); // e.g. 10
$highestColumn = $objWorksheet->getHighestColumn(); // e.g 'F'數組
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); // e.g. 5瀏覽器
echo '<table>' . "\n";
for ($row = 1; $row <= $highestRow; ++$row) {
echo '<tr>' . "\n";緩存
for ($col = 0; $col <= $highestColumnIndex; ++$col) {
echo '<td>' . $objWorksheet->getCellByColumnAndRow($col, $row)->getValue() . '</td>' . "\n";
}
echo '</tr>' . "\n";
}
echo '</table>' . "\n";
?>
4.5.6。使用值粘合劑,以方便數據錄入
在內部,PHPExcel使用默認PHPExcel_Cell_IValueBinder實現(PHPExcel_Cell_DefaultValueBinder),以肯定使用細胞的setValue()方法輸入的數據的數據類型。
或者,PHPExcel的默認行爲能夠被修改,用戶能夠方便地輸入數據。例如,一個PHPExcel_Cell_AdvancedValueBinder類是否存在。它會自動轉換輸入爲字符串格式是否正確,還設置單元格的樣式信息百分比和日期。下面的例子演示瞭如何設置的值粘結劑PHPExcel:
/** PHPExcel */
require_once 'PHPExcel.php';
/** PHPExcel_Cell_AdvancedValueBinder */
require_once 'PHPExcel/Cell/AdvancedValueBinder.php';
/** PHPExcel_IOFactory */
require_once 'PHPExcel/IOFactory.php';
// Set value binder
PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
//添加一些數據,相似一些不一樣的數據類型
$objPHPExcel->getActiveSheet()->setCellValue('A4', 'Percentage value:');
$objPHPExcel->getActiveSheet()->setCellValue('B4', '10%');
//轉換爲0.1,並設置個單元格樣式
$objPHPExcel->getActiveSheet()->setCellValue('A5', 'Date/time value:');
$objPHPExcel->getActiveSheet()->setCellValue('B5', '21 December 1983');
//轉換爲日期,並設置日期格式的單元格樣式
建立本身的價值粘結劑是容易的。
當須要先進值綁定,能夠實現PHPExcel_Cell_IValueBinder接口或延長PHPExcel_Cell_DefaultValueBinder或PHPExcel_Cell_AdvancedValueBinder類。
4.6。 PHPExcel食譜
如下幾頁爲您提供一些普遍使用的PHPExcel食譜。請注意,這些不提供具體的PHPExcel API函數的完整文檔,而只是一個凸點,讓你開始。若是您須要特定的API函數,請參閱API文檔。
例如,4.4.7設置工做表的頁面方向和大小覆蓋設置頁面方向爲A4。其餘紙張格式,如美國信,都沒有包括在本文檔中,但PHPExcel API文檔中得到。
4.6.1。設置電子表格的元數據
PHPExcel容許一種簡單的方法來設置電子表格中的元數據,使用文檔屬性訪問。電子表格的元數據能夠在一個文件存儲庫或文檔管理系統中查找特定的文檔很是有用。例如微軟SharePoint使用文檔元數據搜索在其文檔列表特定文檔。
設置電子表格的元數據方法以下:
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
$objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");
$objPHPExcel->getProperties()->setCategory("Test result file");
4.6.2。設置電子表格的活動表
下面的代碼行設置活動工做表索引到第一頁:
$ objPHPExcel-> setActiveSheetIndex(0);
4.6.3。寫日期或時間進入細胞
在Excel中,日期和時間存儲爲計數自1900-01-01通過的天數數值。例如,日期「2008-12-31」表示爲39813.您能夠經過在單元格中輸入該日期,以後換號格式爲「通常」,因此真正的數值表如今Microsoft Office Excel中驗證這一點。一樣,「凌晨3:15」表示爲0.135417。
PHPExcel可與UST(國際標準時間)日期和時間值,但不執行內部轉換;因此它是由開發者確保傳遞到日期/時間轉換函數值是UST。
在單元格中寫入一個日期值由2行代碼。選擇適合你的最好的方式。這裏有些例子:
/* PHPExcel_Cell_AdvanceValueBinder required for this sample */
require_once 'PHPExcel/Cell/AdvancedValueBinder.php';
// MySQL-like timestamp '2008-12-31' or date string
PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
$objPHPExcel->getActiveSheet()
->setCellValue('D1', '2008-12-31');
$objPHPExcel->getActiveSheet()
->getStyle('D1')
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH)
// PHP-time (Unix time)
$time = gmmktime(0,0,0,12,31,2008); // int(1230681600)
$objPHPExcel->getActiveSheet()
->setCellValue('D1', PHPExcel_Shared_Date::PHPToExcel($time));
$objPHPExcel->getActiveSheet()
->getStyle('D1')
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH)
// Excel-date/time
$objPHPExcel->getActiveSheet()
->setCellValue('D1', 39813)
$objPHPExcel->getActiveSheet()
->getStyle('D1')
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH)
用於輸入日期的全部上述方法獲得相同的結果。 PHPExcel_Style_NumberFormat提供了大量的預約義的日期格式。
該PHPExcel_Shared_Date :: PHPToExcel()方法也將與PHP DateTime對象工做。
一樣,時間(或日期和時間值),能夠以一樣的方式輸入:只記得使用適當的格式代碼。
筆記:
1.請參見「使用值粘合劑,以方便數據錄入」來了解更多關於在第一個例子中使用的AdvancedValueBinder。
2.在之前的版本中PHPExcel的直至幷包括1.6.6,當一個細胞有個約會般的數字格式代碼,它有可能直接進入使用整數PHP時間日期無須轉換到Excel日期格式。與PHPExcel 1.6.7起這已再也不支持。
3. Excel中也能夠在基於1904年日曆(默認工做簿保存在Mac)進行操做。一般狀況下,你沒必要使用PHPExcel時,擔憂這個。
4.6.4。寫了公式的單元格
裏面的Excel文件,公式老是存儲它們將出如今英文版本的Microsoft Office Excel中,並在內部PHPExcel處理全部的公式在這種格式。這意味着下面的規則成立:
•小數分隔符爲「。」 (期)
•函數參數的分隔符是','(逗號)
•矩陣行分隔符是「;」 (分號)
•英語函數名稱必須使用
這是不管哪一個Microsoft Office Excel中的語言版本可能已被用於建立Excel文件。
當最終簿被用戶打開,Microsoft Office Excel中將會顯示根據應用語言式照顧。轉換由應用程序照顧!
下面的代碼行寫入公式「=IF(C4>500,"profit","loss")」進入小區B8。須要注意的是公式必須以「=」開始進行PHPExcel認可這是一個公式。
若是你想要寫一個字符串用「=」的小區開始,那麼你應該使用setCellValueExplicit()方法。
$objPHPExcel->getActiveSheet()
->setCellValueExplicit('B8',
'=IF(C4>500,"profit","loss")',
PHPExcel_Cell_DataType::TYPE_STRING
);
單元格的公式能夠再次使用下面的代碼行閱讀
$formula = $objPHPExcel->getActiveSheet()->getCell('B8')->getValue();
若是你須要一個單元格的計算值,使用下面的代碼。這是在in 4.4.35.進一步解釋。
$value = $objPHPExcel->getActiveSheet()->getCell('B8')->getCalculatedValue();
4.6.5。爲公式區域設置
一些本土化元素都被列入PHPExcel。您能夠經過更改設置設置一個區域。設置本地化俄羅斯可使用:
$locale = 'ru';
$validLocale = PHPExcel_Settings::setLocale($locale);
if (!$validLocale) {
echo 'Unable to set locale to '.$locale." - reverting to en_us<br />\n";
}
若是俄語文件不可用,給setlocale()方法會返回一個錯誤,和英語的設置將在整個使用。
一旦您設置一個區域,你能夠翻譯從其內部英語編碼的公式。
$formula = $objPHPExcel->getActiveSheet()->getCell('B8')->getValue();
$translatedFormula =
PHPExcel_Calculation::getInstance()->_translateFormulaToLocale($formula);
您也可使用函數名和適當的定義的區域設置參數分割建立一個公式;而後設置單元格值以前它翻譯成英文:
$formula = '=ДНЕЙ360(ДАТА(2010;2;5);ДАТА(2010;12;31);ИСТИНА)';
$internalFormula =
PHPExcel_Calculation::getInstance()->translateFormulaToEnglish($formula);
$objPHPExcel->getActiveSheet()->setCellValue('B8',$internalFormula);
目前,公式翻譯只轉換函數名,常量真假,以及函數參數分隔符。
目前,下列區域設置的支持:
Language |
|
Locale Code |
Czech |
Čeština |
cs |
Danish |
Dansk |
da |
German |
Deutsch |
de |
Spanish |
Español |
es |
Finnish |
Suomi |
fi |
French |
Français |
fr |
Hungarian |
Magyar |
hu |
Italian |
Italiano |
it |
Dutch |
Nederlands |
nl |
Norwegian |
Norsk |
no |
Polish |
Język polski |
pl |
Portuguese |
Português |
pt |
Brazilian Portuguese |
Português Brasileiro |
pt_br |
Russian |
русский язык |
ru |
Swedish |
Svenska |
sv |
Turkish |
Türkçe |
tr |
4.6.6。在單元格中寫換行符「\ n」(ALT +「回車」)
在Microsoft Office Excel您經過點擊ALT +「Enter」鍵獲得一個細胞一個換行符。當你這樣作,它會自動打開「自動換行」的單元格。
下面是如何在PHPExcel實現這一點:
$objPHPExcel->getActiveSheet()->getCell('A1')->setValue("hello\nworld");
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true);
瞭解更多關於使用getStyle()的其餘地方設置單元格。
AdvancedValuebinder.php會自動打開「自動換行」,爲細胞時,它看到了,你是在單元格中插入一個串一個換行符。就像微軟Office Excel中。嘗試這個:
require_once 'PHPExcel/Cell/AdvancedValueBinder.php';
PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
$objPHPExcel->getActiveSheet()->getCell('A1')->setValue("hello\nworld");
瞭解更多關於AdvancedValueBinder.php別處。
4.6.7。明確設置單元格的數據類型
您能夠經過使用細胞的setValueExplicit方法或工做表的方法setCellValueExplicit明確設置單元格的數據類型。下面是一個例子:
$objPHPExcel->getActiveSheet()->getCell('A1')->setValueExplicit('25', PHPExcel_Cell_DataType::TYPE_NUMERIC);
4.6.8。一個細胞變成可點擊網址
您能夠經過設置超連接屬性使細胞中的可點擊的網址:
$objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net');
$objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('http://www.phpexcel.net');
若是你想使一個超連接到另外一個工做表/單元格,使用下面的代碼:
$objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net');
$objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl(「sheet://'Sheetname'!A1」);
4.6.9。設置一個工做表的頁面方向和大小
設置工做表的頁面方向和大小能夠用下面的代碼行來完成:
$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
$objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
請注意,有可用的附加頁面設置。請參考API文檔全部可能的選擇。
4.6.10。頁面設置:縮放選項
如圖所示的插圖PHPExcel的頁面設置縮放選項直接關係到在「頁面設置」對話框中的縮放選項。
如圖插圖PHPExcel默認值對應於MS Office Excel中的默認值
method |
initial value |
calling method will trigger |
Note |
setFitToPage(...) |
false |
- |
|
setScale(...) |
100 |
setFitToPage(false) |
|
setFitToWidth(...) |
1 |
setFitToPage(true) |
value 0 means do-not-fit-to-width |
setFitToHeight(...) |
1 |
setFitToPage(true) |
value 0 means do-not-fit-to-height |
下面是如何高大無限頁面以適應1頁寬:
$objPHPExcel->getActiveSheet()->getPageSetup()->setFitToWidth(1);
$objPHPExcel->getActiveSheet()->getPageSetup()->setFitToHeight(0);
正如你所看到的,這是沒有必要調用setFitToPage(真),由於setFitToWidth(...)和setFitToHeight(...)觸發此。
若是使用setFitToWidth(),你應該在通常還指定setFitToHeight()顯式地像例子。當心依靠初始值。若是你是從PHPExcel 1.7.0升級到1.7.1凡適合到高度和適合與寬度的默認值改成0到1,這是尤爲如此。
4.6.11。頁邊距
要設置頁邊距爲工做表,使用此代碼:
$objPHPExcel->getActiveSheet()->getPageMargins()->setTop(1);
$objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0.75);
$objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.75);
$objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(1);
注意,邊緣值在英寸指定。
4.6.12。水平中心頁/垂直
水平居中頁/垂直,可使用下面的代碼:
$objPHPExcel->getActiveSheet()->getPageSetup()->setHorizontalCentered(true);
$objPHPExcel->getActiveSheet()->getPageSetup()->setVerticalCentered(false);
4.6.13。設置工做表的打印頁眉和頁腳
設置工做表的打印頁眉和頁腳能夠用下面的代碼行來完成:
$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader('&C&HPlease treat this document as confidential!');
$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddFooter('&L&B' . $objPHPExcel->getProperties()->getTitle() . '&RPage &P of &N');
替代和格式化代碼(從&)能夠在裏面頁眉和頁腳中使用。沒有在其中這些代碼必須出現要求的順序。
如下代碼中第一次出現輪番格式ON,第二次出現再次將其關閉:
» Strikethrough
» Superscript
» Subscript
標和下標不能同時在同一時間打開。以先到者爲準勝其餘被忽略,而第一接通。
下面的代碼由Excel2007的支持:
&L |
Code for "left section" (there are three header / footer locations, "left", "center", and "right"). When two or more occurrences of this section marker exist, the contents from all markers are concatenated, in the order of appearance, and placed into the left section. |
&P |
Code for "current page #" |
&N |
Code for "total pages" |
&font size |
Code for "text font size", where font size is a font size in points. |
&K |
Code for "text font color"
» RGB Color is specified as RRGGBB » Theme Color is specifed as TTSNN where TT is the theme color Id, S is either "+" or "-" of the tint/shade value, NN is the tint/shade value. |
&S |
Code for "text strikethrough" on / off |
&X |
Code for "text super script" on / off |
&Y |
Code for "text subscript" on / off |
&C |
Code for "center section". When two or more occurrences of this section marker exist, the contents from all markers are concatenated, in the order of appearance, and placed into the center section. |
&D |
Code for "date" |
&T |
Code for "time" |
&G |
Code for "picture as background"
Please make sure to add the image to the header/footer: $objDrawing = new PHPExcel_Worksheet_HeaderFooterDrawing(); $objDrawing->setName('PHPExcel logo'); $objDrawing->setPath('./images/phpexcel_logo.gif'); $objDrawing->setHeight(36); $objPHPExcel->getActiveSheet()->getHeaderFooter()->addImage($objDrawing, PHPExcel_Worksheet_HeaderFooter::IMAGE_HEADER_LEFT); |
&U |
Code for "text single underline" |
&E |
Code for "double underline" |
&R |
Code for "right section". When two or more occurrences of this section marker exist, the contents from all markers are concatenated, in the order of appearance, and placed into the right section. |
&Z |
Code for "this workbook's file path" |
&F |
Code for "this workbook's file name" |
&A |
Code for "sheet tab name" |
&+ |
Code for add to page # |
&- |
Code for subtract from page # |
&"font name,font type" |
Code for "text font name" and "text font type", where font name and font type are strings specifying the name and type of the font, separated by a comma. When a hyphen appears in font name, it means "none specified". Both of font name and font type can be localized values. |
&"-,Bold" |
Code for "bold font style" |
&B |
Code for "bold font style" |
&"-,Regular" |
Code for "regular font style" |
&"-,Italic" |
Code for "italic font style" |
&I |
Code for "italic font style" |
&"-,Bold Italic" |
Code for "bold italic font style" |
&O |
Code for "outline style" |
&H |
Code for "shadow style" |
提示
碼上表彷佛勢不可擋您第一次試圖找出如何寫一些頁眉或頁腳。幸運的是,還有一個更簡單的方法。讓Microsoft Office Excel中作的工做適合你。
例如,在Microsoft Office Excel中建立,你做爲使用程序自身的接口所需插入頁眉和頁腳XLSX文件。將文件保存爲test.xlsx。如今,採起這一文件,並讀出用PHPExcel以下值:
$objPHPexcel = PHPExcel_IOFactory::load('test.xlsx');
$objWorksheet = $objPHPexcel->getActiveSheet();
var_dump($objWorksheet->getHeaderFooter()->getOddFooter());
var_dump($objWorksheet->getHeaderFooter()->getEvenFooter());
var_dump($objWorksheet->getHeaderFooter()->getOddHeader());
var_dump($objWorksheet->getHeaderFooter()->getEvenHeader());
這揭示了奇/偶頁眉和頁腳的代碼。有經驗的用戶可能會發現更容易從新命名爲test.xlsx爲test.zip,將它解壓縮,並直接查閱有關XL /工做表/ sheetX.xml的內容找到頁眉/頁腳中的代碼。
4.6.14。在一行或一列設置打印符
要設置打印斷線,使用下面的代碼,它設置在10排一排休息。
$objPHPExcel->getActiveSheet()->setBreak( 'A10' , PHPExcel_Worksheet::BREAK_ROW );
下面的代碼行設置在D列的打印突破:
$objPHPExcel->getActiveSheet()->setBreak( 'D10' , PHPExcel_Worksheet::BREAK_COLUMN );
4.6.15。打印時,顯示/隱藏網格線
顯示/隱藏網格線打印時,使用下面的代碼:
$objPHPExcel->getActiveSheet()->setShowGridlines(true);
4.6.16。設置行/列頂部重複/左
PHPExcel能夠重複特定的行/頂部/左細胞頁面。如下代碼是如何重複行1至5中的特定的工做表的每一打印頁上的例子:
$objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 5);
4.6.17。指定打印區域
要指定一個工做表的打印區域,使用下面的代碼:
$objPHPExcel->getActiveSheet()->getPageSetup()->setPrintArea('A1:E5');
此外,還能夠在一個工做表中的多個印刷方面:
$objPHPExcel->getActiveSheet()->getPageSetup()->setPrintArea('A1:E5,G4:M20');
4.6.18。設置單元格
一個單元能夠用字體,邊框,填充,...樣式信息進行格式化。例如,能夠設置爲紅色單元格的前景色,靠右對齊,而且邊框爲黑色,粗邊框樣式。讓咱們作到這一點的單元格B2:
$objPHPExcel->getActiveSheet()->getStyle('B2')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet()->getStyle('B2')->getFill()->getStartColor()->setARGB('FFFF0000');
Starting with PHPExcel 1.7.0 getStyle() also accepts a cell range as a parameter. For example, you can set a red background color on a range of cells:
$objPHPExcel->getActiveSheet()->getStyle('B3:B7')->getFill()
->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
->getStartColor()->setARGB('FFFF0000');
提示
建議風格多個單元格一次,例如使用的getStyle('A1:M500「),而不是在一個循環中個別樣式的細胞。這相對於經過細胞循環和個別造型要快得多。
此外,還有一個替代的方式來設置的樣式。下面的代碼設置單元格的風格字體加粗,右對齊,上邊框薄,漸變填充:
$styleArray = array(
'font' => array(
'bold' => true,
),
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_RIGHT,
),
'borders' => array(
'top' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
),
),
'fill' => array(
'type' => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
'rotation' => 90,
'startcolor' => array(
'argb' => 'FFA0A0A0',
),
'endcolor' => array(
'argb' => 'FFFFFFFF',
),
),
);
$objPHPExcel->getActiveSheet()->getStyle('A3')->applyFromArray($styleArray);
或單元格區域:
$objPHPExcel->getActiveSheet()->getStyle('B3:B7')->applyFromArray($styleArray);
使用數組這種替代方法應該是更快,只要你設置多個樣式屬性執行方面。但不一樣的可能幾乎是可測量的,除非你有工做簿中的許多不一樣的風格。
以前PHPExcel 1.7.0 duplicateStyleArray()是造型的小區範圍的推薦方法,可是這種方法現已自的getStyle棄用()已開始接受一個單元格區域。
4.6.19。數字格式
你常常要在Excel格式化數字。例如,您可能想要一個千位分隔符加小數點後固定數量的小數。或者你想用一些數字是零填充。
在Microsoft Office Excel,你可能熟悉從「單元格格式」對話框中選擇一個數字格式。這裏有可用的一些預約義的數字格式包括一些日期。該對話框設計的方式,因此你沒必要除非您須要自定義數字格式與底層的原始數字格式的代碼進行交互。
在PHPExcel,你也能夠應用各類預約義的數字格式。例:
$objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1);
這將例如格式化數1587.2因此它顯示爲1,587.20,當你打開MS Office Excel中的工做簿。 (根據爲在Microsoft Office Excel小數和千位分隔設置,它可能會顯示爲1.587,20)
您可使用此實現徹底同樣,上面:
$objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()
->setFormatCode('#,##0.00');
在Microsoft Office Excel,以及在PHPExcel,你將有每當你須要一些特殊的自定義數字格式的原始數字格式代碼進行交互。例:
$objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()
->setFormatCode('[Blue][>=3000]$#,##0;[Red][<0]$#,##0;$#,##0');
另外一個例子是當你想要的數字零填充帶前導零爲固定長度:
$objPHPExcel->getActiveSheet()->getCell('A1')->setValue(19);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()
->setFormatCode('0000'); // will show as 0019 in Excel
小費
用於組成在Excel中的數字格式代碼,能夠將規則至關複雜。有時候,你知道如何建立Microsoft Office Excel中一些數字格式,但不知道底層的數字格式的代碼是什麼樣子。你怎麼找到它?
隨PHPExcel讀者前來救援。使用例如裝入模板的工做簿Excel2007的讀者透露的數字格式代碼。例如如何讀取單元格A1的數字格式的代碼:
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $objReader->load('template.xlsx');
var_dump($objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()
->getFormatCode());
高級用戶可能會發現它更快地經過重命名爲template.xlsx template.zip,解壓縮,並尋找持有的數字格式代碼XL / styles.xml相關的一段XML代碼檢查直接的數字格式代碼。
4.6.20。校準和自動換行
讓咱們垂直對齊方式設置爲頂部單元格A1:D4
$objPHPExcel->getActiveSheet()->getStyle('A1:D4')
->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_TOP);
下面是如何實現換行文字:
$objPHPExcel->getActiveSheet()->getStyle('A1:D4')
->getAlignment()->setWrapText(true);
4.6.21。設置工做簿的默認樣式
有可能設置一個工做簿的默認的樣式。讓咱們默認的字體設置爲宋體大小8:
$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial');
$objPHPExcel->getDefaultStyle()->getFont()->setSize(8);
4.6.22。造型單元格邊框
在PHPExcel很容易在矩形選擇應用各類邊框。下面是如何應用厚厚的紅色邊框輪廓圍繞單元格B2:G8。
$styleArray = array(
'borders' => array(
'outline' => array(
'style' => PHPExcel_Style_Border::BORDER_THICK,
'color' => array('argb' => 'FFFF0000'),
),
),
);
$objWorksheet->getStyle('B2:G8')->applyFromArray($styleArray);
在Microsoft Office Excel,上述操做就至關於選擇單元格B2:G8,啓動風格的對話框,選擇一個厚厚的紅色邊框,並單擊「綱要」邊框組件。
注意,邊界輪廓被施加到矩形選擇B2:單獨G8做爲一個總體,而不是在每一個小區。
你能夠只用5個基本的邊框和上一次單細胞操做實現任何邊框效果:
Array key |
Maps to property |
left right top bottom diagonal |
getLeft() |
額外的快捷鍵邊框派上用場,就像上面的例子。這些快捷鍵可用邊界:
Array key |
Maps to property |
allborders inside horizontal |
getAllBorders() getOutline() getInside() getVertical() getHorizontal()
|
全部邊境快捷鍵的概述中能夠看到下面的圖片:
若是同時設置例如allborders和垂直,那麼咱們有「重疊」邊框和組件的人有哪裏有邊界重疊拉攏對方。在PHPExcel,從弱到強的邊界,列表以下:allborders,大綱/裏面,垂直/水平,左/右/上/下/對角線。
這個邊界層次可被用來實現以容易的方式的各類效果。
4.6.23。條件格式的單元格
一個單元能夠有條件格式化,基於特定的規則。例如,能夠若是它的值是零如下,並以綠色,若是它的值是零個或多個單元格的前景顏色設置爲紅色。
人們可使用如下代碼設置條件樣式規則集到單元:
$objConditional1 = new PHPExcel_Style_Conditional();
$objConditional1->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS);
$objConditional1->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_LESSTHAN);
$objConditional1->addCondition('0');
$objConditional1->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
$objConditional1->getStyle()->getFont()->setBold(true);
$objConditional2 = new PHPExcel_Style_Conditional();
$objConditional2->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS);
$objConditional2->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_GREATERTHANOREQUAL);
$objConditional2->addCondition('0');
$objConditional2->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_GREEN);
$objConditional2->getStyle()->getFont()->setBold(true);
$conditionalStyles = $objPHPExcel->getActiveSheet()->getStyle('B2')->getConditionalStyles();
array_push($conditionalStyles, $objConditional1);
array_push($conditionalStyles, $objConditional2);
$objPHPExcel->getActiveSheet()->getStyle('B2')->setConditionalStyles($conditionalStyles);
若是要複製的規則集到其餘單元格,能夠複製該樣式對象:
$objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('B2'), 'B3:B7' );
4.6.24。註釋添加到單元格
要將註釋添加到單元格,使用下面的代碼。下面的例子增長了電池E11評論:
$objPHPExcel->getActiveSheet()->getComment('E11')->setAuthor('PHPExcel');
$objCommentRichText = $objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun('PHPExcel:');
$objCommentRichText->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun("\r\n");
$objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun('Total amount on the current invoice, excluding VAT.');
4.6.25。應用自動篩選到的單元格區域
要應用自動篩選的單元格區域,請使用如下代碼:
$objPHPExcel->getActiveSheet()->setAutoFilter('A1:C9');
請確保您始終包含完整的過濾範圍!
Excel中確實支持僅設置標題行,可是這不是一個最好的作法?
4.6.26。在電子表格設置的安全性
Excel提供了3個級別的「保護」:文檔安全性,板材的安全性和電池的安全性。
- 文檔安全容許你在一個完整的電子表格設置密碼,容許輸入該密碼時,只所作的更改。
- 工做表的安全性提供了其餘安全選項:您能夠禁止在特定工做表中插入的行,禁止排序,...
- 電池的安全性提供了鎖定/解鎖單元以及顯示/隱藏內部公式選項
關於設置文檔安全性的一個例子:
$objPHPExcel->getSecurity()->setLockWindows(true);
$objPHPExcel->getSecurity()->setLockStructure(true);
$objPHPExcel->getSecurity()->setWorkbookPassword("PHPExcel");
關於設置工做表安全性的一個例子:
$objPHPExcel->getActiveSheet()->getProtection()->setPassword('PHPExcel');
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
$objPHPExcel->getActiveSheet()->getProtection()->setSort(true);
$objPHPExcel->getActiveSheet()->getProtection()->setInsertRows(true);
$objPHPExcel->getActiveSheet()->getProtection()->setFormatCells(true);
關於設置單元安全性的一個例子:
$objPHPExcel->getActiveSheet()->getStyle('B1')->getProtection()->setLocked(
PHPExcel_Style_Protection::PROTECTION_UNPROTECTED
);
確保您啓用工做表保護,若是你須要的任何工做表保護功能!這能夠用下面的代碼來實現:
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
4.6.27。上的小區設置數據驗證
數據驗證是Excel2007中的一個強大的功能。它容許以指定在可在一個特定的細胞中插入的數據的輸入濾波器。該過濾器能夠是一個範圍(即值必須是0和10之間),一個列表(即,值必須從列表中選取的),...
下面這段代碼只容許在B3單元格中輸入10和20之間的數字:
$objValidation = $objPHPExcel->getActiveSheet()->getCell('B3')
->getDataValidation();
$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_WHOLE );
$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_STOP );
$objValidation->setAllowBlank(true);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setErrorTitle('Input error');
$objValidation->setError('Number is not allowed!');
$objValidation->setPromptTitle('Allowed input');
$objValidation->setPrompt('Only numbers between 10 and 20 are allowed.');
$objValidation->setFormula1(10);
$objValidation->setFormula2(20);
下面這段代碼只容許在B3單元格中輸入的數據從一個列表選擇了一個項目:
$objValidation = $objPHPExcel->getActiveSheet()->getCell('B5')
->getDataValidation();
$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST );
$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
$objValidation->setAllowBlank(false);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setShowDropDown(true);
$objValidation->setErrorTitle('Input error');
$objValidation->setError('Value is not in list.');
$objValidation->setPromptTitle('Pick from list');
$objValidation->setPrompt('Please pick a value from the drop-down list.');
$objValidation->setFormula1('"Item A,Item B,Item C"');
當使用像上面數據驗證列表,確保你把之間的名單「與」和你用逗號分割的項目(,)。
要記住,參加一個Excel公式中的任何字符串容許爲最多255個字符(而不是字節)是很重要的。這臺多少項目能夠將字符串「項目A,項目B,C項」中有個限度。所以,它一般是一個更好的主意,直接在某些單元格區域中鍵入項目值,例如A1:A3,而是使用,好比說,
$objValidation->setFormula1('Sheet!$A$1:$A$3');
另外一個好處是,該項目值自己能夠包含逗號「,」字符自己。
若是你須要數據的多個單元格的驗證,能夠克隆規則集:
$objPHPExcel->getActiveSheet()->getCell('B8')->setDataValidation(clone $objValidation);