PHP_XLSXWriter 样式,使用PHP_XLSXWriter代替PHPExcel
二者有何区别?
PHPExcel 是一个处理Excel,CVS文件的开源框架,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,这也是PHP至今最通用的Excel处理工具,但是它有一个非常致命的缺点: 特别占内存,对大批量的表格数据几乎会让人累觉不爱,处理速度非常慢,但是它功能非常丰富,API非常多,所以在导出复杂格式的Excel表格时,你往往不得不使用它,真是让人又爱又恨。
不幸的是,PHPExcel官方已不再维护了这个项目了,官方团队在github上又起了一个新项目,叫PhpSpreadsheet,新项目使用了大量的php新特性,比如命名空间,PSR标准,性能也比PHPExcel高了不少,不过该项目至今(2017-07-12)还是开发状态,最小稳定版还没出来,估计bug会比较多,所以并不建议使用,下图是项目迁移说明:
相比于PHPExcel,PHP_XLSXWriter是一个小而强悍的Excel读写插件,它并没有PHPExcel功能丰富,很多高级操作比如冻结表头,并不具备,但是它导出速度非常快,非常适合于数据量特别大,报表格式不是很复杂的导出需求,下图是官方的速度和内存测试:
PHP_XLSXWriter 如何使用?
下载
这是 PHP_XLSXWriter的github地址,你可以点击下载把它下载下来。解压之后你可以看到,它的核心文件只有一个: xlswriter.class.php,examples目录为代码样例目录,里面有很多例子你可以参考。
使用
对于日常中绝大部分的报表需求,PHP_XLSXWriter 是可以胜任的,下面通过一个例子来熟悉一下API的使用。
假设我们要导出下图中的报表,并通过浏览器实现下载:
代码实现:
//writer 类
$writer = new XLSXWriter();
//文件名
$filename = "example.xlsx";
//设置 header,用于浏览器下载
header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"');
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('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)A0047',
'payt_scsr_name' => '李巧红',
'payt_received' => '300.00',
'paytd_type' => '现金',
'emp_name' => '郑振标',
),
1 =>
array (
'payc_bill_time' => '2017-07-12 16:39:55',
'payt_received_date' => '2017-07-12',
'ci_name' => '租金',
'payt_num' => 'YRZB(2012)A0046',
'payt_scsr_name' => '22222',
'payt_received' => '45.00',
'paytd_type' => '现金',
'emp_name' => '郑振标',
)
);
//每列的标题头
$title = array (
0 => '开单时间',
1 => '收款时间',
2 => '开票项目',
3 => '票据编号',
4 => '客户名称',
5 => '实收金额',
6 => '收款方式',
7 => '收款人',
);
//工作簿名称
$sheet1 = 'sheet1';
//对每列指定数据类型,对应单元格的数据类型
foreach ($title as $key => $item){
$col_style[] = $key ==5 ? 'price': 'string';
}
//设置列格式,suppress_row: 去掉会多出一行数据;widths: 指定每列宽度
$writer->writeSheetHeader($sheet1, $col_style, ['suppress_row'=>true,'widths'=>[20,20,20,20,20,20,20,20]] );
//写入第二行的数据,顺便指定样式
$writer->writeSheetRow($sheet1, ['xxx财务报表'],
['height'=>32,'font-size'=>20,'font-style'=>'bold','halign'=>'center','valign'=>'center']);
/*设置标题头,指定样式*/
$styles1 = array( 'font'=>'宋体','font-size'=>10,'font-style'=>'bold', 'fill'=>'#eee',
'halign'=>'center', 'border'=>'left,right,top,bottom');
$writer->writeSheetRow($sheet1, $title,$styles1);
// 最后是数据,foreach写入
foreach ($data as $value) {
foreach ($value as $item) { $temp[] = $item;}
$rows[] = $temp;
unset($temp);
}
$styles2 = ['height'=>16];
foreach($rows as $row){
$writer->writeSheetRow($sheet1, $row,$styles2);
}
//合并单元格,第一行的大标题需要合并单元格
$writer->markMergedCell($sheet1, $start_row=0, $start_col=0, $end_row=0, $end_col=7);
//输出文档
$writer->writeToStdOut();
exit(0);
上面的每行代码都做了注释,如果不懂得话可以去查看一下example文件夹中的代码样例以及官网主页的文档,不过文档比较简短;
跳坑指南:
自己在使用过程中也踩过一些坑,这里列一下,希望对你有帮助:
文件名与类名不对应
在使用require或require_once时,这其实不是问题,但当使用自动加载时因为二者不对应就无法识别。你或许想把xlsxwriter.class.php文件引入到你的项目中,并且加上命名空间,以便于能实现自动加载。此时你需要做的是把文件名更改为类名XLSXWriter.class.php(这里引入到TP中),比如我放到Component目录下,那么在该文件中添加命名空间namespace Component;,此时该文件中还有个Zip类未引入命名空间,需要添加use ZipArchive;
这些完成后,就可以在项目中其他地方使用了:
use Component;
$writer = new XLSXWriter();
如何设置列格式?
不同的列可能会需要显示不同的格式,默认的都是文本格式,但有时候需要显示为数字列,比便于使用excel中的函数,比如上表中的金额列,必须是两位小数点,千分位,数字格式。
看上面的代码,数字格式其实是在writeSheetHeader方法中设置的,类型为price的那一列就是金额列,如果你需要其他格式,官网首页上列出了常用的格式。
能不能单独设置某个单元格的值?
这个目前并没有实现,现在数据的写入都是逐行写入的,不支持这么细的粒度,不过折中的做法是把不需要填充的单元格写入null即可;
如果有什么使用问题,可以在下面留言,一起探讨使用方式:)
PHP_XLSXWriter 样式,使用PHP_XLSXWriter代替PHPExcel相关推荐
- PHP_XLSXWriter 样式,PHP_XLSXWriter
软件简介 PHP_XLSXWriter 是一个用 PHP 开发的轻量级 XLSX Excel 电子表格库,有着相对较低的内存占用. 它设计为使用(Office 2007+)xlsx 格式输出 Exce ...
- PHP7.2环境中PHPExcel无法导出Excel
问题 这几天接到一个bug,说的是有某一个后台的列表页有一个excel导出功能,最近不能使用了,我立即登陆系统发现确实如此,但是这个上线项目已经运行长达2年,中间并没有出现问题,于是我拉出源码进行分析 ...
- php导出excel失败原因,PHPExcel导出Excel文件报找不到该文件错误
本文主要讲解关于PHPExcel兼容PHP版本和操作execl知识 目前解决问题:兼容PHP版本问题. 阐述下:小伙子我改bug的过程,如下:线下将代码写好(无错误),本地Apache服务器测试--& ...
- table php导出pdf不居中,PHPExcel及Mpdf导出
PHPExcel常用操作 #导入类库 require_once 'PHPExcel/Classes/PHPExcel.php'; require_once 'PHPExcel/Classes/PHPE ...
- PHP导出Excel,亲测有用
最近有个项目需要导出Excel表的功能,上网查了,发现有挺多缺陷的,有些太久远的了,phpExcel文件都无法下载,官网都迁移到github上了 第一步 去github下载phpexcel 下载地址 ...
- PHP 生成Excel报表基本操作
PHP生成Excel基础操作 1.基本操作 导出excel属性设置 //Include class require_once('Classes/PHPExcel.php'); require_once ...
- phpexcel导出-PHP_XLSXWriter
phpexcel导出-PHP_XLSXWriter PHP_XLSXWriter 浏览器导出 cli导出 PHP_XLSXWriter PHP_XLSXWriter 是一个轻量级的 PHP Excel ...
- PHPExcel表格的导出,PHP_XLSXWriter导出和PHPExcel导入
前言:网站自带的一个PHPExcel导入功能,现在需要加一个导出. 问题:导出数据太多,占脚本运行内存,容易内存不足 解决: 1/使用轻量级PHP_XLSXWriter导出 2/自己编写的导出代码 3 ...
- Laravel 使用PHP_XLSXWriter实现大数据量Excel导出
我在去年写过一篇关于laravel的Excel导出文章:Laravel Excel 实现 Excel/CSV 文件导入导出功能,使用的是Laravel Excel实现的. 该扩展包含Excel导入导出 ...
- phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护
转载连接:http://www.cnblogs.com/huangcong/p/3687665.html phpexcel中文教程-设置表格字体颜色背景样式.数据格式.对齐方式.添加图片.批注.文字块 ...
最新文章
- “雪花”项目:Microsoft探索在.NET中实现手工内存管理
- python xpath语法-XPath语法和lxml模块(数据提取)
- 【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )
- 二维数组||考试成绩统计: 案例描述:有三名同学(张三,李四,王五),在一次考试中的成绩分别如下表,请分别输出三名同学的总成绩
- 鸿蒙不算安卓系统吗,加入鸿蒙≠使用鸿蒙,鸿蒙不属于华为也仅限于华为
- 一文掌握常用的机器学习模型(免费课程+送书福利)
- SAP License:晨紫集团ERP系统应用考核体系简介
- RN position定位及Android兼容处理
- C++继承机制(三)——多继承、菱形继承、虚继承原理
- python学习路程1
- 类查找android中跨项目的数据库操作ContentProvider的使用
- 大数据技术的表现形式有哪些
- 常用 Git 命令清单(阮一峰)
- Serengeti Accomodation
- L3_01 01背包和最小序列
- Junit 4 的使用
- Linux服务器如何修改登录用户的密码
- python刷新网页_python调用浏览器刷新网页的简单示例
- 图灵机停机问题的不可判定性
- Redis-Java客户端
热门文章
- python tkinter 窗口 隐藏 显示_【Python GUI】隐藏窗体和弹窗窗体的探索
- 20200427 FTL 模板语言参考 梳理 (常用)
- 傅里叶变换matlab学习笔记
- 数值计算值第四期:解线性方程组的扰动分析
- 阿里云视频点播VoD
- Java毕业设计-疫情防控系统
- python上海房价数据分析_Python数据分析告诉你为何上海的二手房你都买不起
- Web App - MUI框架实战
- 计算机高级职称答辩ppt,专业技术职务任职资格评审答辩工程系列高级工程师PPT.pptx...
- 2021年人工智能学习路线图分享