使用背景 使用传统的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
下面是使用代码
<?phpnamespace 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文档