使用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传输。

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

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

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

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

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...
