Аргумент 2, передаваемый в Maatwebsite \ Excel \ Excel :: download (), должен иметь тип string, объект указан - PullRequest
0 голосов
/ 18 мая 2019

Аргумент 2, передаваемый в Maatwebsite \ Excel \ Excel :: download (), должен иметь тип строки, заданный объект, вызываемый в 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 () должен иметь тип string,объект дан. не знаю, где проблема.кто-нибудь проверьте пожалуйста.Я использую Laravel 5.8

1 Ответ

1 голос
/ 18 мая 2019

Я не использовал этот пакет, но из сигнатуры метода видно, что второй аргумент ожидает string, который будет именем файла для загрузки:

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

В вашем случае вы возвращаете callback.


Обновление 1

Видя документы, я думаю, что вы пытаетесь использовать статический метод create класса Excel, но вместо этого вы используете (неправильно) загрузочный метод. Из документов :

Создание листа из массива

Массив

Чтобы создать новый файл из массива, используйте ->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, это не поможет. В текущей версии вы можете отформатировать ваш выходной файл с помощью комбинации Export s и Sheet классов. На самом деле, это более модульный подход для разделения и улучшения вашего кода. Проверьте этот раздел документов.

...