使用phpexcel生成Excel文件和圖表
>在本文中,我們將看到如何使用phpexcel庫在Web應用程序中提供“導出到Excel”功能,以便用戶可以將數據導出到Excel 2007/2013文件中以進行進一步分析。 >
注意:有一些PHP庫可以提供Excel(和Office)文件操作。我們在這裡使用的LIB稱為Phpexcel,這是Phpoffice的子集,可以在此處克隆。
鑰匙要點
Phpexcel(phpoffice的一個子集)啟用了純PHP操縱Excel文件,避免了對Interop和Windows依賴的需求。
>- >教程演示了使用遊戲數據,其他分析和使用phpexcel的圖表創建一個Excel文件,以增強數據顯示和分析。
- >必需的設置包括5.2.0上方的PHP版本,啟用特定的PHP擴展名,並使用Composer進行PHPEXCEL安裝。
- > phpexcel允許詳細的Excel文件操作,包括設置屬性,填充工作表,插入公式和創建視覺上吸引人的圖表。 最終輸出涉及以可下載的格式保存Excel文件,還包括圖表,並在Phpexcel當前無法在Excel 2013中有效處理餅圖。
- >目標
- 在本教程之後,我們將獲得:
- > 在2013-14賽季中,我最喜歡的NBA球隊 - La Lakers的比賽信息(日期,球隊,得分,輸球狀態)顯示了一張床單。
該Excel文件將使用一些其他分析數據填充,並且圖表也由PHP和Excel生成。
讓我們開始。
- 準備
- 要使用phpexcel,我們必須具有5.2.0以上的PHP版本。還需要啟用3個php擴展名:PHP_ZIP(操作Office 2007格式),PHP_XML和PHP_GD2(可選,但對於精確的列寬度自動計算所需)。 )。
- 接下來,通過作曲家安裝庫。 當然,我們應該啟動並運行我們的數據庫。本教程的數據轉儲(Lakers.sql)已上傳到與本文關聯的回購。數據以簡單的SQL語句檢索到數據:“從湖人中選擇 *”(總共90個記錄,包括8個季前賽和82場常規賽)。
>此外,此演示使用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時,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方法。- 從arraray方法採用3個參數: 1。數據源,數組形式;
<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>
- $ ews2:我們要插入的Excel工作表實例;
- > $位置:此工作表的索引。因此,0意味著它應該成為第一。 -1意味著它應該是最後一個。
>
<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)仍被擠壓。這意味著自動寬度計算並不總是可行的。好吧,無論如何,這沒什麼大不了的。
一張圖片值得一千個單詞
>擁有我們數據的視覺表示總是很高興的,因此圖表將派上用場。 Excel擁有豐富的內置圖表,供我們選擇。 phpexcel幾乎可以利用所有這些。我們要創建的第一張圖表是列表圖表,顯示了湖人隊及其對手的每場比賽中分數的起伏。 >。
即使在庫的支持下,創建圖表也是冗長的編碼作業。此過程的完整代碼可以在我們的classexcel.php文件中的AddChart1和AddChart2方法中找到。我只會解釋關鍵步驟。
- 數據系列標籤
<span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
- 類型。對於標籤,毫無疑問它應該是“字符串”;
- 來源。它在D1或E1; 中
- 格式。通常,提供零是足夠的,並且將使用默認格式; >計數。源中有多少數據。通常應該是1。
- x軸值標籤
- >這標識了x軸的標籤。例如,在“ 2013-11-15”上,湖人得分86,對手得分89。 “ 2013-11-15”是這兩個分數的標籤。對於我們的情況,我們將使用第2行到第91行的“日期播放”列:
-
構造函數是相同的,參數也是如此。
數據系列值
<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行。
- 我們擁有以上3個關鍵變量後,我們可以設置數據系列。在Excel中,數據系列包含以下對於創建圖表至關重要的信息:
>
分組
<span>$ews = $ea->getSheet(0); </span><span>$ews->setTitle('Data');</span>
數據系列標籤
- x軸值標籤
- 數據系列值
- >通過簡單地傳遞所有這些參數來調用構造函數:
- >
- 接下來,我們將創建繪圖區域和傳奇:
<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回購。
現在,“數據”表將看起來像這樣:
和圖表的縮放視圖。它是正確定位和尺寸的:
結論
一般而言,我發現這個Phpexcel Lib值得嘗試且易於學習。在編程時,它在IDE中的代碼洞察力可以為我們提供很多幫助。
>我們沒有在Excel文件中介紹其他共同功能 - 如果興趣足夠高,我們將寫一篇有關這些功能的後續文章。讓我們知道!
>其官方文檔和示例是找到常見任務的詳細API使用說明和可行的代碼段的好地方。徹底閱讀它們。它們可以在克隆的存儲庫中找到。 嘗試一下這個圖書館,讓我們知道您自己的用例!
經常詢問的問題(常見問題解答)有關使用phpexcel生成Excel文件和圖表的問題
>如何在項目中安裝phpexcel? 在項目中安裝phpexcel,您需要在PHP中使用Composer,這是PHP中的依賴關係管理工具。首先,如果尚未這樣做,則需要安裝作曲家。安裝作曲家後,導航到終端中的項目目錄並運行命令作曲家需要phpoffice/phpexcel。此命令將在您的項目中下載並安裝phpexcel。 >如何使用phpexcel創建一個基本的excel文件? >使用phpexcel創建一個基本的excel文件,您需要首先創建一個實例phpexcel類。然後,您可以設置Excel文件的屬性,例如標題,描述和作者。之後,您可以通過訪問單元格並設置其值來將數據添加到Excel文件中。最後,您可以通過創建作者並調用保存方法來保存Excel文件。 如何使用phpexcel?使用phpexcel的文件,您需要首先創建一個數據系列。數據系列表示將在圖表中顯示的數據。創建數據系列後,您可以創建圖表並將數據系列添加到其中。然後,您可以設置圖表的屬性,例如標題和傳說。最後,您可以通過調用AddChart方法來將圖表添加到工作表中。>
>如何使用phpexcel中讀取Excel文件的數據?您需要首先創建讀者。讀者負責打開Excel文件並閱讀其內容。創建閱讀器後,您可以通過調用加載方法加載Excel文件。然後,您可以通過訪問單元格和獲取其值來訪問Excel文件中的數據。 >如何使用phpexcel將數據寫入現有的excel文件?現有的Excel文件使用phpexcel,您需要首先創建讀取器並加載Excel文件。然後,您可以訪問Excel文件中的單元格並設置其值。修改數據後,您可以通過創建作者並調用保存方法來保存更改。 如何使用phpexcel中的excel文件中格式化單元格?在Excel文件中格式化單元格的方法。您可以設置單元格的字體,顏色,對齊,邊框和數字格式。您還可以合併單元格,設置單元格的寬度和高度,並將樣式應用於單元格。 如何使用Phpexcel?由於內存限制,可能會具有挑戰性。但是,PHPEXCEL提供了一個單元緩存功能,可以幫助減少存儲器使用情況。通過啟用細胞緩存,Phpexcel將將單元數據存儲在緩存而不是存儲器中,這可以大大減少內存使用。>如何使用phpexcel從Excel文件中生成PDF?要生成PDF,您需要創建PDF類型的作者並調用保存方法。請注意,您需要在項目中安裝了適當的PDF渲染庫。
>如何使用phpexcel添加圖像? 。要添加圖像,您需要創建一個繪圖對象,設置圖像的路徑,並指定應將圖像放置在工作表中的坐標。
>如何處理phpexcel中的錯誤和異常?
>> phpexcel使用異常來處理錯誤。當發生錯誤時,Phpexcel將引發異常。您可以使用TryCatch塊捕獲這些異常,並適當處理它們。這使您可以控製程序的流程並向用戶提供有意義的錯誤消息。
以上是使用phpexcel生成Excel文件和圖表的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

RESTAPI設計原則包括資源定義、URI設計、HTTP方法使用、狀態碼使用、版本控制和HATEOAS。 1.資源應使用名詞表示並保持層次結構。 2.HTTP方法應符合其語義,如GET用於獲取資源。 3.狀態碼應正確使用,如404表示資源不存在。 4.版本控制可通過URI或頭部實現。 5.HATEOAS通過響應中的鏈接引導客戶端操作。

在PHP中,異常處理通過try,catch,finally,和throw關鍵字實現。 1)try塊包圍可能拋出異常的代碼;2)catch塊處理異常;3)finally塊確保代碼始終執行;4)throw用於手動拋出異常。這些機制幫助提升代碼的健壯性和可維護性。

匿名類在PHP中的主要作用是創建一次性使用的對象。 1.匿名類允許在代碼中直接定義沒有名字的類,適用於臨時需求。 2.它們可以繼承類或實現接口,增加靈活性。 3.使用時需注意性能和代碼可讀性,避免重複定義相同的匿名類。

在PHP中,include,require,include_once,require_once的區別在於:1)include產生警告並繼續執行,2)require產生致命錯誤並停止執行,3)include_once和require_once防止重複包含。這些函數的選擇取決於文件的重要性和是否需要防止重複包含,合理使用可以提高代碼的可讀性和可維護性。

PHP中有四種主要錯誤類型:1.Notice:最輕微,不會中斷程序,如訪問未定義變量;2.Warning:比Notice嚴重,不會終止程序,如包含不存在文件;3.FatalError:最嚴重,會終止程序,如調用不存在函數;4.ParseError:語法錯誤,會阻止程序執行,如忘記添加結束標籤。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
