>在本文中,我們將看到如何使用phpexcel庫在Web應用程序中提供“導出到Excel”功能,以便用戶可以將數據導出到Excel 2007/2013文件中以進行進一步分析。 >
注意:有一些PHP庫可以提供Excel(和Office)文件操作。我們在這裡使用的LIB稱為Phpexcel,這是Phpoffice的子集,可以在此處克隆。
鑰匙要點
讓我們開始。
>此外,此演示使用Silex作為MVC框架。樹枝將用作模板引擎。確保在Composer.json文件中正確指定了必要的依賴項。
index.php將是我們Silex應用程序的入口點。將定義兩條路線:
<span>$app->get('/', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->index($app); </span><span>}); </span> <span>$app->post('/export', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->export($app); </span><span>});</span>
路由'/'將是我們的入口點,並顯示數據和“導出”按鈕。路由“/導出”將執行實際導出到Excel的後端處理過程。這兩個功能都包裹在用戶定義的類中(classexcel.php)。在本文的其餘部分中,我們將重點關注此文件 - 或更確切地說,該文件中定義的導出函數和相關功能,並使用phpexcel庫討論Excel操作的幾個重要方面。
>當我們單擊圖標啟動Excel時,Excel應用程序會開始。在正常情況下,它還將包含一個具有3個工作簿(在Excel 2013,僅1個)工作表。工作表是我們玩的“畫布”。這是Excel中最重要的兩個術語。其他重要術語可能包括:單元,範圍等。
>要實例化excel文件,我們使用:
><span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
> Excel應用程序實例通常映射到物理Excel文件。它有自己的元數據來描述我們創建的文件。當我們“ alt-enter”一個excel文件時顯示元數據(或右鍵單擊該文件並選擇“屬性”):
>
<span>$ea->getProperties() </span> <span>->setCreator('Taylor Ren') </span> <span>->setTitle('PHPExcel Demo') </span> <span>->setLastModifiedBy('Taylor Ren') </span> <span>->setDescription('A demo to show how to use PHPExcel to manipulate an Excel file') </span> <span>->setSubject('PHP Excel manipulation') </span> <span>->setKeywords('excel php office phpexcel lakers') </span> <span>->setCategory('programming') </span> <span>;</span>
工作表和細胞種群
>
要獲取對工作表的參考,我們使用:>
<span>$ews = $ea->getSheet(0); </span><span>$ews->setTitle('Data');</span>
為了填充一個單元/單元,我們至少有兩個選擇:
對於這些標題,標題和其他描述性項目,我們將使用SetCellValue方法一個一個填充它們。
對於結構化數據(其中大多數)來自SQL Select語句,我們將使用FromArray方法。<span>$ews->setCellValue('a1', 'ID'); // Sets cell 'a1' to value 'ID </span> <span>$ews->setCellValue('b1', 'Season'); </span> <span>... </span> <span>//Fill data </span> <span>$ews->fromArray($data, ' ', 'A2');</span>
>
注意:當我們使用pdo獲取數據時,簡單$ res = $ q-> fetchall(pdo :: fetch_assoc);呼叫將迫使返回的結果數據集僅包含關聯的數組,而無需索引。如果在沒有選項pdo :: fetch_assoc的情況下調用了fetchall,則結果集實際上將包含兩組相同的數據,一個以關聯的數組形式,一個以索引形式為索引,將在使用fromArray時在Excel文件中創建重複項。
>我們也可能想設置標頭行(ID,季節等)。為此,我們也有兩種方法:
><span>$app->get('/', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->index($app); </span><span>}); </span> <span>$app->post('/export', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->export($app); </span><span>});</span>
>一種方法是使用一些GET方法來檢索我們要更改和更改它的樣式對象。我們為“背景填充”樣式這樣做。
>另一個是聲明“樣式”數組,並指定我們要更改的樣式以及將它們更改為什麼。然後,我們使用applyfromarray將樣式應用於批處理。在這裡,我們更改了字體和對齊方式。
>兩種方法支持範圍作為其參數($ header ='a1:h1';),非常方便。
>最後,我們可能需要調整列寬度,以便它們適合每列中顯示的最大長度:
<span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
如果我們現在保存文件 - 我們將稍後討論保存 - 我們將看到XLSX文件中填充了數據並正確格式:
插入一個新工作表,我們要做:
>
<span>$ea->getProperties() </span> <span>->setCreator('Taylor Ren') </span> <span>->setTitle('PHPExcel Demo') </span> <span>->setLastModifiedBy('Taylor Ren') </span> <span>->setDescription('A demo to show how to use PHPExcel to manipulate an Excel file') </span> <span>->setSubject('PHP Excel manipulation') </span> <span>->setKeywords('excel php office phpexcel lakers') </span> <span>->setCategory('programming') </span> <span>;</span>
>
<span>$ews = $ea->getSheet(0); </span><span>$ews->setTitle('Data');</span>
>注意:請特別注意單元格參考(G2:G91)。該公式的懶惰方式是使用諸如g:g之類的範圍。當表格中沒有圖表時,這可以正常工作。如果有圖表,則g:g符號將失敗,引發異常。
此“摘要”表看起來像這樣:
>
單元B4中顯示的%由以下代碼設置:
請注意一些樣式問題。對於A1,我應用了以下樣式:
><span>$app->get('/', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->index($app); </span><span>}); </span> <span>$app->post('/export', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->export($app); </span><span>});</span>
結果表明,正確應用了字體重量,字體大小和對齊方式。 A1和B1合併到A1中也可以正確完成。但是,setautosize方法在此合併的單元格上失敗。結果是該單元格(A1)仍被擠壓。這意味著自動寬度計算並不總是可行的。好吧,無論如何,這沒什麼大不了的。
>。
即使在庫的支持下,創建圖表也是冗長的編碼作業。此過程的完整代碼可以在我們的classexcel.php文件中的AddChart1和AddChart2方法中找到。我只會解釋關鍵步驟。
<span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
數據系列值
<span>$ea->getProperties() </span> <span>->setCreator('Taylor Ren') </span> <span>->setTitle('PHPExcel Demo') </span> <span>->setLastModifiedBy('Taylor Ren') </span> <span>->setDescription('A demo to show how to use PHPExcel to manipulate an Excel file') </span> <span>->setSubject('PHP Excel manipulation') </span> <span>->setKeywords('excel php office phpexcel lakers') </span> <span>->setCategory('programming') </span> <span>;</span>
>我們將使用“自我得分”(D列)和“對手得分”(E列)。兩者都是從第2行到第91行。
分組
<span>$ews = $ea->getSheet(0); </span><span>$ews->setTitle('Data');</span>
數據系列標籤
<span>$app->get('/', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->index($app); </span><span>}); </span> <span>$app->post('/export', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->export($app); </span><span>});</span>
繪圖區域包含圖表和數據系列的佈局。佈局可以指定圖表是否顯示值,百分比等。我們可以使用NULL,以便將使用默認佈局。
>傳說提供數據組的視覺表示。
>現在,我們可以創建圖表:
<span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
<span>$ea->getProperties() </span> <span>->setCreator('Taylor Ren') </span> <span>->setTitle('PHPExcel Demo') </span> <span>->setLastModifiedBy('Taylor Ren') </span> <span>->setDescription('A demo to show how to use PHPExcel to manipulate an Excel file') </span> <span>->setSubject('PHP Excel manipulation') </span> <span>->setKeywords('excel php office phpexcel lakers') </span> <span>->setCategory('programming') </span> <span>;</span>
注意:大多數情況下,單元格引用不敏感,但是當表格中有圖表時,請使用大寫字母號。
保存文件
>它使用工廠模式來創建作者對象來保存文件。將指定格式(我們在案例中使用“ Excel2007”格式)。
<span>$ews = $ea->getSheet(0); </span><span>$ews->setTitle('Data');</span>
>確保我們在保存過程中有setIncludeCharts(true),否則圖表將不存在。
還記得我說Phpexcel可以利用幾乎所有圖表類型嗎?在Excel 2013中,該LIB無法做得很好的一個例外是,它不會產生可用的餅圖。在我們的output.xlsx和我們的代碼中,我們實際上創建了一個餅圖(在AddChart1中完成),但是在打開output.xlsx時,Excel 2013將引起錯誤。如果我們選擇繼續,則餅圖將丟失,並且只能保留線路圖(在AddChart2中完成)。錯誤報告已經提交給其GIT回購。
現在,“數據”表將看起來像這樣:
和圖表的縮放視圖。它是正確定位和尺寸的:
結論
>我們沒有在Excel文件中介紹其他共同功能 - 如果興趣足夠高,我們將寫一篇有關這些功能的後續文章。讓我們知道!
>其官方文檔和示例是找到常見任務的詳細API使用說明和可行的代碼段的好地方。徹底閱讀它們。它們可以在克隆的存儲庫中找到。 嘗試一下這個圖書館,讓我們知道您自己的用例!
>
>如何使用phpexcel中讀取Excel文件的數據?您需要首先創建讀者。讀者負責打開Excel文件並閱讀其內容。創建閱讀器後,您可以通過調用加載方法加載Excel文件。然後,您可以通過訪問單元格和獲取其值來訪問Excel文件中的數據。 >如何使用phpexcel將數據寫入現有的excel文件?現有的Excel文件使用phpexcel,您需要首先創建讀取器並加載Excel文件。然後,您可以訪問Excel文件中的單元格並設置其值。修改數據後,您可以通過創建作者並調用保存方法來保存更改。 如何使用phpexcel中的excel文件中格式化單元格?在Excel文件中格式化單元格的方法。您可以設置單元格的字體,顏色,對齊,邊框和數字格式。您還可以合併單元格,設置單元格的寬度和高度,並將樣式應用於單元格。 如何使用Phpexcel?由於內存限制,可能會具有挑戰性。但是,PHPEXCEL提供了一個單元緩存功能,可以幫助減少存儲器使用情況。通過啟用細胞緩存,Phpexcel將將單元數據存儲在緩存而不是存儲器中,這可以大大減少內存使用。>如何使用phpexcel添加圖像? 。要添加圖像,您需要創建一個繪圖對象,設置圖像的路徑,並指定應將圖像放置在工作表中的坐標。
> phpexcel使用異常來處理錯誤。當發生錯誤時,Phpexcel將引發異常。您可以使用TryCatch塊捕獲這些異常,並適當處理它們。這使您可以控製程序的流程並向用戶提供有意義的錯誤消息。
以上是使用phpexcel生成Excel文件和圖表的詳細內容。更多資訊請關注PHP中文網其他相關文章!