この記事では、PHP に関する関連知識を提供し、主に xlswriter 拡張機能とは何かについて説明します。 xlswriter 拡張機能を使用して Excel エクスポートのパフォーマンスを最適化する方法。興味のある方は以下をご覧ください。皆さんのお役に立てれば幸いです。
xlswriter は、大量のデータをエクスポートする際の PHP のパフォーマンスを向上させるために設計された PHP C 拡張機能です。リナックス。 Excel 2007 XLSX ファイルのデータの読み取り、複数のワークシートの挿入、テキスト、数値、数式、日付、グラフ、画像、ハイパーリンクの書き込みに使用できます。
次の機能があります:
1. 書き込み
2 です。読んでください
##githubソースコード
https://github.com/viest/php-ext-xlswriterxlswriterドキュメント
https://xlswriter-docs.viest.me/zh-cn/an-zhuang/huan-jing-yao-qiuIDE ヘルパーのダウンロード
composer require viest/php-ext-xlswriter-ide-helper:dev-masterしかし、ダウンロードに失敗し続けたので、github ウェアハウスに行って直接ダウンロードしました https://github.com/viest/php-ext-xlswriter-ide -helper
次に、内部のいくつかのクラスを xlswriter_ide_helper.php ファイルにコピーし、このファイルをプロジェクトに配置すると、コード プロンプトが表示されます。
xlswriter 拡張機能をインストールします
docker exec -it php72-fpm bashcd /usr/local/bin pecl install xlswriter docker-php-ext-enable xlswriter php -m php --ri xlswriter Version => 1.3.6 docker restart php72-fpm
パフォーマンス テスト:
テスト データ: 20 列、各列の長さは 19 文字の英字です
Xlswriter
#PHPreadSheet
##PHP_XLSXWriterprivate function rankPersonExport($activityInfo, $list){ $date = date('Y-m-d'); $filename = "{$activityInfo['orgname']}-{$activityInfo['name']}-个人排行榜-{$date}"; $header = ['名次', '用户ID', '对接账号', '姓名', '电话', '部门ID', '一级部门', '二级部门', '三级部门', '总积分', '最后积分时间', "毫秒"]; if (!empty($activityInfo['ext'])) { $extArr = json_decode($activityInfo['ext'], true); foreach ($extArr as $errItem) { array_push($header, $errItem['name']); } } // list $listVal = []; foreach($list as $v){ $temp = [ $v['rank'], $v['userid'], $v['userName'], $v['nickName'], $v['phone'], $v['departid'], $v['topDepartName'], $v['secDepartName'], $v['thirdDepartName'], $v['score'], $v['updatetime'], $v['micro'], ]; if (!empty($v['ext'])) { $extArr = explode('|', $v['ext']); foreach ($extArr as $k2 => $v2) { $errItemArr = explode('^', $v2); array_push($temp, $errItemArr[1]); } } array_push($listVal, $temp); } $re = downloadXLSX($filename, $header, $listVal); if($re){ return $this->output(0, $re); }else{ return $this->output(1, 'success'); }}
function getTmpDir(): string{ $tmp = ini_get('upload_tmp_dir'); if ($tmp !== False && file_exists($tmp)) { return realpath($tmp); } return realpath(sys_get_temp_dir());}/** * download xlsx file * * @param string $filename * @param array $header * @param array $list * @return string errmsg */function downloadXLSX(string $filename, array $header, array $list): string{ try { $config = ['path' => getTmpDir() . '/']; $excel = (new \Vtiful\Kernel\Excel($config))->fileName($filename.'.xlsx', 'Sheet1'); $fileHandle = $excel->getHandle(); $format1 = new \Vtiful\Kernel\Format($fileHandle); $format2 = new \Vtiful\Kernel\Format($fileHandle); // title style $titleStyle = $format1->fontSize(16) ->bold() ->font("Calibri") ->align(\Vtiful\Kernel\Format::FORMAT_ALIGN_CENTER, \Vtiful\Kernel\Format::FORMAT_ALIGN_VERTICAL_CENTER) ->toResource(); // global style $globalStyle = $format2->fontSize(10) ->font("Calibri") ->align(\Vtiful\Kernel\Format::FORMAT_ALIGN_CENTER, \Vtiful\Kernel\Format::FORMAT_ALIGN_VERTICAL_CENTER) ->border(\Vtiful\Kernel\Format::BORDER_THIN) ->toResource(); $headerLen = count($header); // header array_unshift($list, $header); // title $title = array_fill(1, $headerLen - 1, ''); $title[0] = $filename; array_unshift($list, $title); $end = strtoupper(chr(65 + $headerLen - 1)); // column style $excel->setColumn("A:{$end}", 15, $globalStyle); // title $excel->MergeCells("A1:{$end}1", $filename)->setRow("A1", 25, $titleStyle); // 冻结前两行,列不冻结 $excel->freezePanes(2, 0); // 数据 $filePath = $excel->data($list)->output(); header("Content-Disposition:attachment;filename={$filename}.xlsx"); $re = copy($filePath, 'php://output'); if ($re === false) { $err = 'failed to write output'; } else { $err = ''; } @unlink($filePath); return $err; } catch (\Vtiful\Kernel\Exception $e) { return $e->getMessage(); }}ダウンロードしたファイルが開けない場合がある場合は、公式デモを使用している可能性があります。問題はファイルサイズにあります( )、この関数はキャッシュされるため、ダウンロードされたファイルのサイズは元のファイルとは異なることがわかります。私のように Content-Length を設定しないか、clearstatcache() を使用して手動でキャッシュをクリアしてください。 正確には、50,000 レコードをエクスポートするのに 1.5 秒かかりますが、その効果は依然として非常に強力です。
エクスポート効果
推奨学習: 「
PHP ビデオ チュートリアル」
以上がxlswriter を使用して Excel エクスポートのパフォーマンスを最適化する PHP の詳細な説明 (コード例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。