【问题标题】:Export data to excel using queue in laravel使用laravel中的队列将数据导出到excel
【发布时间】:2019-03-19 16:39:09
【问题描述】:

您好,我正在尝试使用 laravel 队列导出 excel 文件。我已经集成了 maatwebsite。

这是我到目前为止所做的

控制器

public function export()
{
    $this->dispatch(new ExportDistributorJob([]));
    Session::flash('success','Data is being exported to excel file.');
    return redirect()->back();
}

工作

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

use App\Model\Products;
use Excel;

class ExportDistributorJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(array $request)
    {
        $this->queue = 'default'; 
        $this->data = $request;
    }

    public function handle()
    {   
        $data = array(
                       'Name' => 'John', 
                       'City' => 'Washington'
                    );

        return Excel::create('invoice', function($excel) use ($data) {
        $excel->sheet('mySheet', function($sheet) use ($data)
        {
            $sheet->fromArray($data);
        });
        })->download('xlsx');

    }
} 

?>

当我执行程序时。它将数据存储在作业表中,然后尝试执行 3 次

MaxAttemptsExceededException 错误。

我无法使用队列将数据导出到 excel 文件。

 QUEUE_DRIVER=database 

任何帮助将不胜感激。
谢谢。

【问题讨论】:

  • 您的作业正在生成错误,3 次后它将失败。在此处阅读laravel-excel.maatwebsite.nl/3.1/exports/collection.html,您可以查看如何导出集合。也可以使用excel队列laravel-excel.maatwebsite.nl/3.1/exports/queued.html
  • @ThijsBouwes 它尝试执行 3 次,但为什么不将数据导出到 csv?如果我将 QUEUE_DRIVER 更改为同步,则效果很好。
  • 能否提供日志或异常?
  • 3 次执行后日志显示错误 - App\Jobs\ExportDistributorJob 尝试次数过多或运行时间过长。该作业之前可能已超时。
  • 使用的是什么版本的包?

标签: php laravel queue jobs maatwebsite-excel


【解决方案1】:

Excel 类从包命名空间中导入错误。

use Maatwebsite\Excel\Excel;

同样ExportDistributorJob::handle 方法返回一个HTTP response and terminates the script

在工作的上下文中,这是无伤大雅的,因为它会突然结束工作。你应该改为store the spreadsheet

public function handle()
{   
    $data = array(
                   'Name' => 'John', 
                   'City' => 'Washington'
                );

    return Excel::create('invoice', function($excel) use ($data) {
        $excel->sheet('mySheet', function($sheet) use ($data) {
            $sheet->fromArray($data);
        });
    })->store('xlsx', storage_path('excel/exports'));

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    相关资源
    最近更新 更多