用PHP_XLSXWriter代替PHPExcel的一个例子
序
本文主要介绍用PHP_XLSXWriter代替PHPExcel的方法,分享给大家参考。下面就不多说了,我们来看看详细的介绍:
两者有什么区别?
PHPExcel,CVS一个处理Excel和CVS文件的开源框架,它基于微软的OpenXML标准和PHP语言。可以用来读写不同格式的电子表格,也是目前PHP中最常用的Excel处理工具。但是,它有一个致命的缺点,占用大量内存。对于大量的表格数据几乎让人感到疲惫和不喜欢,处理速度非常慢。但是它的功能非常丰富,API也很多,所以在导出复杂格式的Excel电子表格时经常要用到,真的让人又爱又恨。
不幸的是,官方的phpExcel不再维护这个项目。官方团队在github上创建了一个名为PhpSpreadsheet的新项目。新项目使用了很多新的PHP特性,比如命名空间和PSR标准,性能比PHPExcel高很多。但该项目截至目前(2017年7月12日)仍处于开发状态,最低稳定版本尚未出来。估计会有更多的bug,所以
与PHPExcel相比,PHP_XLSXWriter是一个小而强大的Excel读写插件,没有PHPExcel丰富。很多高级操作,比如冻结表头都没有,但是导出速度很快,非常适合数据量大、报表格式复杂的导出需求。下图显示了官方速度和内存测试:
如何使用PHP_XLSXWriter?
下载
这是PHP_XLSXWriter的github地址。当然可以本地下载。可以点击下载下载。解压后可以看到它的核心文件只有一个: xlswriter.class.php,示例目录就是代码示例目录,有很多示例可以参考。
使用
PHP_XLSXWriter能够胜任大多数日常报表需求。让我们通过一个例子来熟悉一下API的使用。
假设我们想要导出下图中的报告,并通过浏览器下载:
代码实现:
//writer类$ writer=new XLSXWriter();//文件名$ filename=' example.xlsx//设置浏览器下载标题的标题(' content-disposition :附件;filename=' ' . xlsxwriter :3360 saint ize _ filename($ filename),”'');标题(' Content-Type:应用程序/vnd . openxmlformats-office document . spread sheet ml . sheet ');标题('内容-传输-编码:二进制');标头(' Cache-Control:必须重新验证');标头(' Pragma : public ');//导出的数据$ string=array(0=array(' payc _ bill _ time '=' 2017-07-12 16:40:44 ',' Payt _ received _ date '=' 2017-07-12 ',' ci _ name)Payt _ num '=' yrzb(2012)a 0047 ',' payt _ scsr _ name'=' Li ',' payt _ received'=' 300.00 ',' paytd _ type '//每一列的表头为$title=array (0='开票时间',1='收款时间',2='开票项目',3='账单编号',4='客户名称',5='实收金额',6='收款方式',7='收款人'。)//工作簿名称$ sheet1=' sheet1//为每一列指定数据类型,对应单元格的数据类型为foreach($ title as $ key=$ item){ $ col _ style[]=$ key==5?价格' : '字符串;}//设置列格式,suppress_row:将多删除一行数据;Widths:指定每列的宽度$ writer-write sheet header($ sheet 1,$ col _ style,[' supprest _ row '=true,' width '=[20,20,20,20,20]]);//把数据写在第二行,顺便指定style $ writer-write sheetrow($ sheet 1,['XXX财务报表'],['height'=32,' font-size'=20,' font-style'=' bold ',' halign'=' center ',' valign。/*设置页眉并指定样式*/$ style 1=数组(' font'=' Tahoma ',' font-size'=10,' font-style'=' bold ',' fill'=' # eee ',' halign'=' center ',' border ' $ writer-write sheetrow($ sheet 1,$title,$ style 1);//最后用foreach($ data as $ value){ foreach($ value as $ item){ $ temp[]=$ item;} $ row[]=$ temp;unset($ temp);} $ style 2=[' height '=16];foreach($row as $ row){ $ writer-write sheetrow($ sheet 1,$ row,$ style 2);}//合并单元格,第一行的标题需要合并单元格$ writer-markmergedcell ($ sheet1,$ start _ row=0,$ start _ col=0,$ end _ row=0,$ end _ col=7);//输出文档$ writer-writeToStdOut();退出(0);上面代码的每一行都有注释。不懂的可以查看示例文件夹中的代码示例和官网首页的文档,但是文档比较短;
跳坑指南:
我在使用的过程中也踩过一些坑。在这里列出来,希望能帮到你:
文件名与类名不对应
当使用require或require_once时,这不是问题,但是当使用自动加载时,因为它们不对应,所以无法识别。您可能希望将xlsxwriter.class.php文件引入到您的项目中,并添加一个命名空间,以便可以自动加载它。此时,您需要做的是将文件名更改为类名XLSXWriter.class.php(这里引入了TP)。例如,如果我将它放在组件目录中,那么将命名空间命名空间组件添加到文件中;此时,文件中仍有Zip类没有引入到命名空间中,因此需要添加使用ZipArchive
这些完成后,可以在项目的其他地方使用
使用组件;$ writer=new XlsXwriter();如何设置列的格式?
不同的列可能需要以不同的格式显示。默认为文本格式,但有时需要显示为数字列,这样更容易在excel中使用函数。例如,上表中的金额列必须是两位小数、千位数和数字格式。
看上面的代码,数字格式其实是在writeSheetHeader方法中设置的,类型price的列就是金额列。如果需要其他格式,常用格式在官网首页列出。
你能单独设置一个单元格的值吗?
这一点目前还没有实现。现在数据是一行一行写,不支持这么细的粒度,但是折中的办法是写不需要填充的null单元格;
摘要
以上就是本文的全部内容。希望本文的内容能给你的学习或工作带来一些帮助。有问题可以留言交流。谢谢你的支持。
版权声明:用PHP_XLSXWriter代替PHPExcel的一个例子是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。