二者有何区别?

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相关推荐

  1. PHP_XLSXWriter 样式,PHP_XLSXWriter

    软件简介 PHP_XLSXWriter 是一个用 PHP 开发的轻量级 XLSX Excel 电子表格库,有着相对较低的内存占用. 它设计为使用(Office 2007+)xlsx 格式输出 Exce ...

  2. PHP7.2环境中PHPExcel无法导出Excel

    问题 这几天接到一个bug,说的是有某一个后台的列表页有一个excel导出功能,最近不能使用了,我立即登陆系统发现确实如此,但是这个上线项目已经运行长达2年,中间并没有出现问题,于是我拉出源码进行分析 ...

  3. php导出excel失败原因,PHPExcel导出Excel文件报找不到该文件错误

    本文主要讲解关于PHPExcel兼容PHP版本和操作execl知识 目前解决问题:兼容PHP版本问题. 阐述下:小伙子我改bug的过程,如下:线下将代码写好(无错误),本地Apache服务器测试--& ...

  4. table php导出pdf不居中,PHPExcel及Mpdf导出

    PHPExcel常用操作 #导入类库 require_once 'PHPExcel/Classes/PHPExcel.php'; require_once 'PHPExcel/Classes/PHPE ...

  5. PHP导出Excel,亲测有用

    最近有个项目需要导出Excel表的功能,上网查了,发现有挺多缺陷的,有些太久远的了,phpExcel文件都无法下载,官网都迁移到github上了 第一步 去github下载phpexcel 下载地址 ...

  6. PHP 生成Excel报表基本操作

    PHP生成Excel基础操作 1.基本操作 导出excel属性设置 //Include class require_once('Classes/PHPExcel.php'); require_once ...

  7. phpexcel导出-PHP_XLSXWriter

    phpexcel导出-PHP_XLSXWriter PHP_XLSXWriter 浏览器导出 cli导出 PHP_XLSXWriter PHP_XLSXWriter 是一个轻量级的 PHP Excel ...

  8. PHPExcel表格的导出,PHP_XLSXWriter导出和PHPExcel导入

    前言:网站自带的一个PHPExcel导入功能,现在需要加一个导出. 问题:导出数据太多,占脚本运行内存,容易内存不足 解决: 1/使用轻量级PHP_XLSXWriter导出 2/自己编写的导出代码 3 ...

  9. Laravel 使用PHP_XLSXWriter实现大数据量Excel导出

    我在去年写过一篇关于laravel的Excel导出文章:Laravel Excel 实现 Excel/CSV 文件导入导出功能,使用的是Laravel Excel实现的. 该扩展包含Excel导入导出 ...

  10. phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护

    转载连接:http://www.cnblogs.com/huangcong/p/3687665.html phpexcel中文教程-设置表格字体颜色背景样式.数据格式.对齐方式.添加图片.批注.文字块 ...

最新文章

  1. “雪花”项目:Microsoft探索在.NET中实现手工内存管理
  2. python xpath语法-XPath语法和lxml模块(数据提取)
  3. 【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )
  4. 二维数组||考试成绩统计: 案例描述:有三名同学(张三,李四,王五),在一次考试中的成绩分别如下表,请分别输出三名同学的总成绩
  5. 鸿蒙不算安卓系统吗,加入鸿蒙≠使用鸿蒙,鸿蒙不属于华为也仅限于华为
  6. 一文掌握常用的机器学习模型(免费课程+送书福利)
  7. SAP License:晨紫集团ERP系统应用考核体系简介
  8. RN position定位及Android兼容处理
  9. C++继承机制(三)——多继承、菱形继承、虚继承原理
  10. python学习路程1
  11. 类查找android中跨项目的数据库操作ContentProvider的使用
  12. 大数据技术的表现形式有哪些
  13. 常用 Git 命令清单(阮一峰)
  14. Serengeti Accomodation
  15. L3_01 01背包和最小序列
  16. Junit 4 的使用
  17. Linux服务器如何修改登录用户的密码
  18. python刷新网页_python调用浏览器刷新网页的简单示例
  19. 图灵机停机问题的不可判定性
  20. Redis-Java客户端

热门文章

  1. python tkinter 窗口 隐藏 显示_【Python GUI】隐藏窗体和弹窗窗体的探索
  2. 20200427 FTL 模板语言参考 梳理 (常用)
  3. 傅里叶变换matlab学习笔记
  4. 数值计算值第四期:解线性方程组的扰动分析
  5. 阿里云视频点播VoD
  6. Java毕业设计-疫情防控系统
  7. python上海房价数据分析_Python数据分析告诉你为何上海的二手房你都买不起
  8. Web App - MUI框架实战
  9. 计算机高级职称答辩ppt,专业技术职务任职资格评审答辩工程系列高级工程师PPT.pptx...
  10. 2021年人工智能学习路线图分享