传递给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
答案 0 :(得分:1)
我没有使用该软件包,但是您可以从method signature中看到,第二个参数期望使用string
作为下载文件的名称:
public function download($export, string $fileName, string $writerType = null, array $headers = [])
以您为例,您要返回callback
。
看到文档,我认为您正在尝试使用 docs: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');
// ^^^^^^^^^^^^^^
}
上面的代码适用于v2
,但是鉴于您正在使用v3
,这对您没有帮助。在当前版本中,可以使用Export
和Sheet
类的组合来格式化输出文件。实际上,这是一种更加模块化的方法,可以解耦和改进您的代码。检查文档中的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