使用背景 使用传统的PHPExcel导出效率太慢,并且资源占用高,数据量大的情况,会导致服务占用大量的资源,从而导致生产意味,再三思索后,决定使用其他高效率的导出方式
PHP-Xlswriter
PHPExcel 因为内存消耗过大的原因不能正常工作, 虽然可以修改内存上限, 但是导出的用时会变得非常的长,不能接受。而其在PHP7及以上版本上面的替代者PhpSpreadsheet的在内存消耗和性能方面的表现更差,几乎没有办法使用。PHP-Xlswriter 是一个 PHP C 扩展,实现的功能是用C语言实现的,性能非常出色,通过使用PHP C扩展这个桥梁,将C语言的功能扩展到PHP中来。安装步骤
推荐使用pecl安装pecl
wget https://pecl.php.net/get/xlswriter-1.5.5.tgz
tar -zxvf xlswriter-1.5.5.tgz
cd xlswriter-1.5.5/
/www/server/php/72/bin/phpize
./configure --with-php-config=/www/server/php/72/bin/php-config
make && make install
echo "extension = xlswriter.so" >> /www/server/php/72/etc/php.ini
查看是否安装成功
php -m
下面是使用代码
<?php
namespace cp\payaialert\services\excel;
use Vtiful\Kernel\Excel;
use Vtiful\Kernel\Format;
/**
* 高性能导出excel
* @ExcelXlswrite
* @Author: linruxian
*/
class ExcelXlswrite
{
public function export($runtimePath,$header,$data)
{
$runtimePath = \Yii::$app->runtimePath . '/strong/payaialert/';
$config = [
'path' => $runtimePath,
];
$excel = new Excel($config);
// fileName 会自动创建一个工作表,你可以自定义该工作表名称,工作表名称为可选参数
$fileObject = $excel->fileName(time(). '.xlsx', 'sheet1');
$fileHandle = $fileObject->getHandle();
$format = new Format($fileHandle);
$colorOneStyle = $format
->font('微软雅黑')
->fontSize(12)
->bold()
->align(Format::FORMAT_ALIGN_CENTER, Format::FORMAT_ALIGN_VERTICAL_CENTER)
->toResource();//标题行格式
$format = new Format($excel->getHandle());
$colorTwoStyle = $format
->font('微软雅黑')
->fontSize(12)
->align(Format::FORMAT_ALIGN_CENTER, Format::FORMAT_ALIGN_VERTICAL_CENTER)
->toResource();//数据行格式
$filePath = $fileObject
->defaultFormat($colorOneStyle)
->header(['Item', 'Cost'])
->defaultFormat($colorTwoStyle)
->freezePanes(1, 0)// 冻结第一行
->gridline(Excel::GRIDLINES_SHOW_SCREEN) // 设置工作表网格线
->data([
['Rent', 1000],
['Gas', 100],
['Food', 300],
['Gym', 50],
])
->output();
flush();
// 关闭当前打开的所有文件句柄 并 回收资源
$excel->close();
}
}
php-xlswriter文档