传递给Maatwebsite \ Excel \ Excel :: download()的参数2必须为字符串类型,给定对象

时间:2019-05-18 19:06:08

标签: php laravel laravel-5.8 maatwebsite-excel

  

传递给Maatwebsite \ Excel \ Excel :: download()的参数2必须为   类型字符串,给定的对象,在   C:\ xampp \ htdocs \ student_route \ vendor \ laravel \ framework \ src \ Illuminate \ Support \ Facades \ Facade.php   在第237行

public function excel_report()
    {
     $student_data = DB::table('student_details')->get()->toArray();
     $student_array[] = array('Name', 'Address', 'Roll No', 'Class');
     foreach($student_data as $student)
     {
      $student_array[] = array(
       'Student Name'  => $student->st_name,
       'Address'   => $student->address,
       'Roll No'   => $student->roll_no,
       'Class'    => $student->st_class
      );
     }
     Excel::download('Student_Data', function($excel) use ($student_array){
      $excel->setTitle('Student Datas');
      $excel->sheet('Student_Datass', function($sheet) use ($student_array){
       $sheet->fromArray($student_array, null, 'A1', false, false);
      });
     })->download('xlsx');
    }
  

我将错误参数2传递给Maatwebsite \ Excel \ Excel :: download()   必须是字符串类型,给定对象。不知道问题出在哪里。   任何人都请检查。我正在使用laravel 5.8

2 个答案:

答案 0 :(得分:1)

我没有使用该软件包,但是您可以从method signature中看到,第二个参数期望使用string作为下载文件的名称:

public function download($export, string $fileName, string $writerType = null, array $headers = [])

以您为例,您要返回callback


更新1

看到文档,我认为您正在尝试使用create类的静态Excel方法,但是您(错误地)使用了下载方法。来自 docs

  

从数组创建工作表

     

数组

     

要使用数组创建新文件,请使用->fromArray($source, $nullValue, $startCell, $strictNullComparison, $headingGeneration)   在工作表closure中。

Excel::create('Filename', function($excel) {

    $excel->sheet('Sheetname', function($sheet) {

        $sheet->fromArray(array(
            array('data1', 'data2'),
            array('data3', 'data4')
        ));

    });

})->export('xls');

因此,在您的情况下,请用download](...)替换第一个create(...)

public function excel_report()
{
    $student_data = DB::table('student_details')->get()->toArray();
    $student_array[] = array('Name', 'Address', 'Roll No', 'Class');

    foreach ($student_data as $student)
    {
        $student_array[] = array(
            'Student Name' => $student->st_name,
            'Address'      => $student->address,
            'Roll No'      => $student->roll_no,
            'Class'        => $student->st_class
        );
    }

    Excel::create('Student_Data', function ($excel) use ($student_array) {
//        ^^^^^^^
        $excel->setTitle('Student Datas');
        $excel->sheet('Student_Datass', function ($sheet) use ($student_array) {
            $sheet->fromArray($student_array, null, 'A1', false, false);
        });
    })->export('xls');
//    ^^^^^^^^^^^^^^
}

更新2

上面的代码适用于v2,但是鉴于您正在使用v3,这对您没有帮助。在当前版本中,可以使用ExportSheet类的组合来格式化输出文件。实际上,这是一种更加模块化的方法,可以解耦和改进您的代码。检查文档中的this section

答案 1 :(得分:0)

截至maatwebsite/Laravel-Excel 3.1

Excel :: download方法的签名已更改

public function download($export, string $fileName, string $writerType = null, array $headers = [])

download期望第二个参数为字符串,回调不再存在。 在此处guide看到升级

如果要继续使用v2.1的明智行为。您可以使用此软件包convenia/excel

作为替代。

当您想保持最新的laravel版本而不更改导入/导出代码时,这会很有帮助。

如果您的导入/导出功能较少,那么我建议根据maatwebsite/Laravel-Excel 3.1

进行更改