首頁 > 後端開發 > php教程 > 使用phpexcel生成Excel文件和圖表

使用phpexcel生成Excel文件和圖表

William Shakespeare
發布: 2025-02-20 09:33:14
原創
870 人瀏覽過

使用phpexcel生成Excel文件和圖表

在我的文章“如何使用PHP製作Microsoft Word文檔”(使用Windows下的Interop功能)之後,有很多評論敦促純PHP實現,即僅使用通用PHP庫來操縱Office Files。

>在本文中,我們將看到如何使用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 2013文件中的一個按鈕。

該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文件時顯示元數據(或右鍵單擊該文件並選擇“屬性”):>

使用phpexcel生成Excel文件和圖表

上面的對話框中顯示的屬性將具有相應的setxxxx方法來設置這些屬性,其中xxxx幾乎與對話框中列出的屬性名稱相同:

>

<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>
登入後複製
登入後複製
登入後複製
登入後複製
方法(setxxxx)是相當自我解釋的,並且映射到“屬性”對話框。映射中存在一些差異,但是我們無法建立連接並不難(例如,“作者”將映射到setCreator)。

工作表和細胞種群

工作表可能是我們操縱最多的對象:使用數據或公式填充單元格,應用樣式,進行數據過濾,插入圖表等。

>

要獲取對工作表的參考,我們使用:

>

<span>$ews = $ea->getSheet(0);
</span><span>$ews->setTitle('Data');</span>
登入後複製
登入後複製
登入後複製
登入後複製
工作簿中的床單始終為0索引。因此,第一張紙(直到現在唯一的)表將為零。該表的默認名稱始終是“工作表”,我們可以使用Setteritle方法更改它。

為了填充一個單元/單元,我們至少有兩個選擇:

對於這些標題,標題和其他描述性項目,我們將使用SetCellValue方法一個一個填充它們。

對於結構化數據(其中大多數)來自SQL Select語句,我們將使用FromArray方法。
  1. 從arraray方法採用3個參數:
  2. 1。數據源,數組形式;
2。如果數據為null,則“填充”值;
<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>
登入後複製
3。一個單元格引用以啟動填充(從左到右,然後向下)。

>

注意:當我們使用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>
登入後複製
登入後複製
登入後複製
登入後複製
不幸的是,這不支持一個範圍參數,因此我們使用for for loop來實現這一目標。

如果我們現在保存文件 - 我們將稍後討論保存 - 我們將看到XLSX文件中填充了數據並正確格式:

使用phpexcel生成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>
登入後複製
登入後複製
登入後複製
登入後複製
addsheet方法採用兩個參數。

    $ ews2:我們要插入的Excel工作表實例;
  • >
  • $位置:此工作表的索引。因此,0意味著它應該成為第一。 -1意味著它應該是最後一個。
>在插入工作表的情況下,我們可以像往常一樣填充此工作表中的單元格並應用樣式。在此表中,我們將使用公式:

>

<span>$ews = $ea->getSheet(0);
</span><span>$ews->setTitle('Data');</span>
登入後複製
登入後複製
登入後複製
登入後複製
>您看到,這與我們在上一節中所做的沒什麼不同。公式字符串就像我們將在Excel文件中輸入以執行必要的計算的字符串。

>注意:請特別注意單元格參考(G2:G91)。該公式的懶惰方式是使用諸如g:g之類的範圍。當表格中沒有圖表時,這可以正常工作。如果有圖表,則g:g符號將失敗,引發異常。

此“摘要”表看起來像這樣:

>

使用phpexcel生成Excel文件和圖表單元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方法中找到。我只會解釋關鍵步驟。

    數據系列標籤
>數據系列標籤通過給出一個名稱(標籤)來標識數據系列。在我們的案例中,如果我們想展示湖人及其對手的分數,我們正在研究兩個標籤:自我得分和對手得分。它們的標籤可以分別在D1和E1中找到:

<span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
登入後複製
登入後複製
登入後複製
登入後複製
>數據系列標籤實際上是phpexcel_chart_dataseriesvalues實例。構造函數包含四個參數:

    類型。對於標籤,毫無疑問它應該是“字符串”; >
  1. 來源。它在D1或E1;
  2. 格式。通常,提供零是足夠的,並且將使用默認格式;
  3. >計數。源中有多少數據。通常應該是1。
  4. 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>
登入後複製
登入後複製
登入後複製
登入後複製
>該構造函數中唯一的新參數是圖表的名稱。 “ Chart1”將足夠好。圖表的標題可以通過以下方式創建:

<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生成Excel文件和圖表和圖表的縮放視圖。它是正確定位和尺寸的:

使用phpexcel生成Excel文件和圖表結論

在本文中,我們演示瞭如何使用純PHP和純PHP Lib(Phpexcel)來操縱Excel。我們創建了一個新文件,填充了數據,在新的表格和分析數據中添加,插入了圖表,最後保存了該文件以供下載。

一般而言,我發現這個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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板