国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

excel百萬數(shù)據(jù)異步導(dǎo)出

小嘰嘰嘰嘰

問題描述

我用隊列來寫入xlsx 用 PhpOffice\PhpSpreadsheet 還是會出現(xiàn)內(nèi)存溢出

為此你搜索到了哪些方案及不適用的原因

我后面用 PHP-Xlswriter 這個導(dǎo)出,無法追加寫入
我用fputcsv 這個可以追加寫入,但是無法創(chuàng)建新的sheet
大家都是咋辦的

3143 10 8
10個回答

gddd

我這邊是分批次導(dǎo)出

  • 小嘰嘰嘰嘰 2023-10-08

    我也是分成好幾批2w一批數(shù)據(jù),放進(jìn)隊列里面, PhpOffice\PhpSpreadsheet 但是這個內(nèi)容大了就會移出,難道要分文件才行嗎

  • gddd 2023-10-08

    一定要新建sheet嗎?不然使用fputcsv就可以了,分批導(dǎo)出到csv 再壓縮到文件 10多萬行 是沒問題的

  • 小嘰嘰嘰嘰 2023-10-08

    最好是放一個xlsx,我想看下大家有沒有更好的,我現(xiàn)在就是fputcsv后生成一個壓縮文件

  • 小嘰嘰嘰嘰 2023-10-08

    大佬我還有一個問題,就是,你是直接把查詢好的數(shù)據(jù)分成塊傳遞進(jìn)去,還是劃定一個范圍,然后在隊列里面查詢進(jìn)行寫入

  • gddd 2023-10-08

    我整個導(dǎo)出都是隊列執(zhí)行的,提交導(dǎo)出條件到隊列,分塊查詢導(dǎo)出到csv,然后壓縮

  • 小嘰嘰嘰嘰 2023-10-08

    好的謝謝

  • 呆呆的阿戴 2024-08-23

    想知道兩位到底是怎么實(shí)現(xiàn)的,沒太明白。比如 我又10W數(shù)據(jù),每次查詢一萬,然后導(dǎo)出到CSV, 追加導(dǎo)入嗎?

  • MarkGo 2024-08-28

    fopen拿句柄,然後分頁查詢,查詢結(jié)果裡面fput追加寫入,最後fclose後進(jìn)行壓縮

Chance

Xlswriter 可以固定內(nèi)存一次導(dǎo)出, 不用分批追加導(dǎo)出

  • 呆呆的阿戴 2024-08-23

    大佬求源碼,想看看你是怎么使用的? 還有Xlswriter是不是需要自己編譯啊 能composer嗎

  • Chance 2024-08-27

    Xlswriter 是擴(kuò)展,不能 composer。使用看文檔就好了

軟飯工程師
SillyDog
  • 暫無評論
muyu

Xlswriter 支持追加導(dǎo)入,實(shí)測百萬數(shù)據(jù)幾十秒吧~

  • 晚安。 2024-04-15

    看了他的文檔 ,追加導(dǎo)入 是怎么寫的

  • 小嘰嘰嘰嘰 2024-04-23

    追加寫入不支持,我這里追加寫入的意思是,一個文件關(guān)閉了,再打開,進(jìn)行寫入,我后面用的fputcsv這個,這個對表格沒有樣子要求感覺效果挺好的

muyu

不知道你是如何處理的,我這邊是按照這種格式導(dǎo)出的,速度還行


// 處理路徑文件以及文件名稱
[$file, $object] = static::handelExcel($path, $name);
// 準(zhǔn)備導(dǎo)出的數(shù)據(jù)
$i = 0;
Item::filter($filter)->chunkById(1000, function ($items) use ($object, &$i) {
    $items->each(function ($item) use ($object, &$i) {
        ++$i;
        $object = $object->data([
            [
                $item->title,
                $item->barcode,
                $item->category,
            ],
        ]);
    });
});
  • 暫無評論
weijer

前端輪詢處理不就行了,后端處理還廢內(nèi)存

  • 暫無評論
liuxingke

https://github.com/openspout/openspout 非常好用,不管多大的數(shù)據(jù)都只占用幾兆內(nèi)存

  • 暫無評論
diguojin

樓上muyu的方案是一個很好的思路: 如果是因?yàn)橐淮巫x取太多數(shù)據(jù)行導(dǎo)致內(nèi)存不夠 這就可以解決問題。
另外,還可以考慮使用html格式 生成簡單xls。

public function outPutHtmlExcel($titles, $rows, $filename)
    {
        header("Content-type:application/vnd.ms-excel");
        header("Content-Disposition:filename=" . $filename . ".xls");
        echo "<body><meta charset='UTF-8'><table border='1'>";
        echo "<tr>";
        foreach ($titles as $title) {
            echo "<th>$title</th>";
        }
        echo "</tr>";
        foreach ($rows as $row) {
            echo "<tr>";
            foreach ($titles as $k => $v) {
                if (isset($row[$k])) {
                    $export = str_replace(["\t", "\r", "\n", "\n\r"], '', $row[$k]) . "\t";
                    echo "<td style='mso-number-format: \@'>$export</td>";
                } else {
                    echo "<td></td>";
                }
            }
            echo "</tr>";
        }
        echo "</table></meta></body>";
        exit();
    }

只要把上面rows 那部分邏輯按照 chunkById 的形式 改造一下,我想應(yīng)該可以解決你的問題。

  • diguojin 2024-04-25

    我這里簡單echo出去了,你可以考慮把它追加到特定文件里。

  • MarkGo 2024-08-28

    真幸福....我遇到的都是又要篩選,又要加背景色,又要加規(guī)則........

qnnp
  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??