在单独的工作表Laravel Maatwebsite中导出大文件

时间:2016-06-02 05:54:14

标签: php laravel

我有50,000个原始。我想导出它们但系统无法导出它。我正在使用此代码。有没有更好的解决方案呢?

Excel::create('catalogDumptReport', function ($excel) use ($finalArray) {
        $excel->sheet('catalogDumptReport', function ($sheet) use ($finalArray) {
            $sheet->fromArray($finalArray);
            $sheet->setFontFamily('Verdana');
            $sheet->setFontSize(10);
            $sheet->row(1, function ($row) {
                $row->setFontWeight('bold');
            });
            $sheet->setBorder('A1', 'thin');
            $sheet->setHeight(1, 20);
        });

    })->export('xls')
        ->download('xls');

1 个答案:

答案 0 :(得分:0)

就个人而言,我建议不要将这样大的xls文件(直接在浏览器中)用于表示。最好的方法(也是最快的)是在后台导出它(例如async Laravel Queue等)。

主要有两个计算复杂性问题:

  1. 时间复杂度 - 增长速度非常快,这意味着此示例中的下载时间也会非常严重。
  2. 内存的复杂性 - 它可以耗尽机器上的所有内存资源,也可以非常快地耗尽机器上的所有内存资源 - 这意味着不仅当前的系统/程序可以非常缓慢地执行但是其他每一个人都在这台机器上挣扎。
  3. 正如我所说,最好的方法是将xle生成放入后台 - 但还有更多:

    您需要找到一种方法来分割数据并将其与一部分数据相加 - 而不是一次性全部。这可以节省内存资源。

    在队列中导出后,您可以在浏览器中查看 ajax请求如果文件已准备好下载并让用户下载已准备好的xls文件。