Rumah >pembangunan bahagian belakang >tutorial php >Penjelasan terperinci tentang PHP menggunakan xlswriter untuk mengoptimumkan prestasi eksport Excel (dengan contoh kod)
Artikel ini membawakan anda pengetahuan yang berkaitan tentang PHP terutamanya bercakap tentang apakah sambungan xlswriter? Cara menggunakan sambungan xlswriter untuk mengoptimumkan prestasi eksport Excel Rakan-rakan yang berminat boleh lihat di bawah.
xlswriter ialah sambungan PHP C yang direka untuk meningkatkan prestasi PHP apabila mengeksport sejumlah besar data Ia menyokong windows /. Linux. Boleh digunakan untuk membaca data dalam fail Excel 2007+ XLSX, memasukkan berbilang lembaran kerja, menulis teks, nombor, formula, tarikh, carta, gambar dan hiperpautan.
Ia mempunyai ciri-ciri berikut:
1 Tulis
Membaca
Muat turun dan pasang
https://github.com/viest/php-ext-xlswriterdokumen xlswriter
https://xlswriter-docs.viest.me/zh-cn/an-zhuang/huan-jing-yao-qiuMuat turun idea helper
composer require viest/php-ext-xlswriter-ide-helper:dev-masterTetapi saya terus gagal memuat turun, jadi saya pergi ke repositori github untuk memuat turun terus https://github.com/viest/php -ext- xlswriter-ide-helper
Kemudian salin beberapa kelas di dalam ke fail xlswriter_ide_helper.php Masukkan fail ini ke dalam projek anda dan anda akan mendapat gesaan kod.
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-fpmData ujian: 20 lajur, setiap lajur panjang ialah 19 huruf Inggeris Contoh penggunaan:
private 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(); }}Jika anda mendapati fail yang dimuat turun kadangkala tidak boleh dibuka, anda sepatutnya telah menggunakan yang rasmi DEMO, masalahnya terletak pada saiz fail(). Fungsi ini dicache, jadi anda akan mendapati bahawa saiz fail yang dimuat turun adalah berbeza daripada fail asal. Sama ada jangan tetapkan Panjang Kandungan seperti yang saya lakukan, atau kosongkan cache secara manual menggunakan clearstatcache(). Tepatnya, ia mengambil masa 1.5 saat untuk mengeksport 50,000 rekod, dan kesannya masih sangat kuat. Kesan eksport
Tutorial Video PHP"
Atas ialah kandungan terperinci Penjelasan terperinci tentang PHP menggunakan xlswriter untuk mengoptimumkan prestasi eksport Excel (dengan contoh kod). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!