Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci tentang PHP menggunakan xlswriter untuk mengoptimumkan prestasi eksport Excel (dengan contoh kod)

Penjelasan terperinci tentang PHP menggunakan xlswriter untuk mengoptimumkan prestasi eksport Excel (dengan contoh kod)

藏色散人
藏色散人ke hadapan
2023-02-24 15:46:114053semak imbas

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.

Mengenai xlswriter

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

  • 100% fail Excel XLSX yang serasi
  • Format Excel penuh
  • Gabung sel
  • Tentukan nama lembaran kerja
  • Penapis
  • Carta
  • Pengesahan Data dan lungsur turun
  • Imej PNG/JPEG helaian
  • Mod dioptimumkan memori untuk menulis fail besar
  • Berfungsi dengan Linux, FreeBSD, OpenBSD, OS X, Windows
  • Disusun untuk 32- bit dan 64-bit
  • lesen FreeBSD
  • Satu-satunya pergantungan ialah zlib

Membaca

    Baca data sepenuhnya
  • Baca data dengan kursor
  • Baca mengikut jenis data
  • xlsx ke CSV
  • Perbandingan prestasi
  • Terima kasih dalam terlebih dahulu untuk menyediakan data

Muat turun dan pasang

kod sumber github

https://github.com/viest/php-ext-xlswriter
dokumen xlswriter

https://xlswriter-docs.viest.me/zh-cn/an-zhuang/huan-jing-yao-qiu
Muat turun idea helper

composer require viest/php-ext-xlswriter-ide-helper:dev-master
Tetapi 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.

Pasang sambungan xlswriter

Pasang dalam docker di sini

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

Ujian prestasi:

Data ujian: 20 lajur, setiap lajur panjang ialah 19 huruf Inggeris

Xlswriter

Penjelasan terperinci tentang PHP menggunakan xlswriter untuk mengoptimumkan prestasi eksport Excel (dengan contoh kod)

PHPSpreadSheet

Penjelasan terperinci tentang PHP menggunakan xlswriter untuk mengoptimumkan prestasi eksport Excel (dengan contoh kod)

PHP_XLSXWriter

Penjelasan terperinci tentang PHP menggunakan xlswriter untuk mengoptimumkan prestasi eksport Excel (dengan contoh kod)

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


Penjelasan terperinci tentang PHP menggunakan xlswriter untuk mengoptimumkan prestasi eksport Excel (dengan contoh kod)

Pembelajaran yang disyorkan: "

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!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam