搜索
首页后端开发php教程使用phpexcel生成Excel文件和图表

使用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
高流量网站的PHP性能调整高流量网站的PHP性能调整May 14, 2025 am 12:13 AM

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

PHP中的依赖注入:初学者的代码示例PHP中的依赖注入:初学者的代码示例May 14, 2025 am 12:08 AM

你应该关心DependencyInjection(DI),因为它能让你的代码更清晰、更易维护。1)DI通过解耦类,使其更模块化,2)提高了测试的便捷性和代码的灵活性,3)使用DI容器可以管理复杂的依赖关系,但要注意性能影响和循环依赖问题,4)最佳实践是依赖于抽象接口,实现松散耦合。

PHP性能:是否可以优化应用程序?PHP性能:是否可以优化应用程序?May 14, 2025 am 12:04 AM

是的,优化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)优化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,并避免使用

PHP性能优化:最终指南PHP性能优化:最终指南May 14, 2025 am 12:02 AM

theKeyStrategiestosiminificallyBoostphpapplicationPermenCeare:1)useOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)优化AtabaseInteractionswithPreparedStateTemtStatementStatementSandProperIndexing,3)配置

PHP依赖注入容器:快速启动PHP依赖注入容器:快速启动May 13, 2025 am 12:11 AM

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增强codemodocultion,可验证性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

PHP中的依赖注入与服务定位器PHP中的依赖注入与服务定位器May 13, 2025 am 12:10 AM

选择DependencyInjection(DI)用于大型应用,ServiceLocator适合小型项目或原型。1)DI通过构造函数注入依赖,提高代码的测试性和模块化。2)ServiceLocator通过中心注册获取服务,方便但可能导致代码耦合度增加。

PHP性能优化策略。PHP性能优化策略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)启用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替换loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

PHP电子邮件验证:确保正确发送电子邮件PHP电子邮件验证:确保正确发送电子邮件May 13, 2025 am 12:06 AM

phpemailvalidation invoLvesthreesteps:1)格式化进行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具