目录
索引文件
excel应用程序及其元数据
>如何使用phpexcel从Excel文件中生成PDF?要生成PDF,您需要创建PDF类型的作者并调用保存方法。请注意,您需要在项目中安装了适当的PDF渲染库。
>如何处理phpexcel中的错误和异常?
首页 后端开发 php教程 使用phpexcel生成Excel文件和图表

使用phpexcel生成Excel文件和图表

Feb 20, 2025 am 09:33 AM

使用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

热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

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话如何劫持工作,如何在PHP中减轻它? 会话如何劫持工作,如何在PHP中减轻它? Apr 06, 2025 am 12:02 AM

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

PHP 8.1中的枚举(枚举)是什么? PHP 8.1中的枚举(枚举)是什么? Apr 03, 2025 am 12:05 AM

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

描述扎实的原则及其如何应用于PHP的开发。 描述扎实的原则及其如何应用于PHP的开发。 Apr 03, 2025 am 12:04 AM

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试? 在PHPStorm中如何进行CLI模式的调试? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

如何用PHP的cURL库发送包含JSON数据的POST请求? 如何用PHP的cURL库发送包含JSON数据的POST请求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...

解释PHP中的晚期静态绑定(静态::)。 解释PHP中的晚期静态绑定(静态::)。 Apr 03, 2025 am 12:04 AM

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

See all articles