安装 3.*
composer require maatwebsite/excel
请在config/app.php以下位置添加ServiceProvider :
'providers' => [
/*
* Package Service Providers...
*/
Maatwebsite\Excel\ExcelServiceProvider::class,
]
'aliases' => [
...
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]
要发布配置,请运行供应商的发布命令:
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
关于导入导出excel 文档里主要设计到三种 : 模型 model , 集合 collection , 数组 Array
导出
php artisan make:export UsersExport --model=Order
简单事例:(科学记数法 转为文本 WithCustomValueBinder)
class OrderExport extends DefaultValueBinder implements WithCustomValueBinder, FromCollection, WithStrictNullComparison, WithHeadings
{
use Exportable;
protected $excel_data;
private $fileName = 'invoices.xls';
private $writerType = Excel::XLS;
// 映射数据也就是数组Array
public function __construct($excel_data)
{
$this->excel_data = $excel_data;
$this->fileName = Carbon::now()->format('Y-m-d') . '.xls';
}
# 表头
public function headings(): array
{
return [
'下单时间', '订单编号'……,
];
}
public function collection()
{
return collect($this->excel_data);
}
// 处理 科学记数法 转为文本 (要继承 WithCustomValueBinder)
public function bindValue(Cell $cell, $value)
{
if (is_numeric($value)) {
$cell->setValueExplicit($value, DataType::TYPE_STRING);
return true;
}
// else return default behavior
return parent::bindValue($cell, $value);
}
// 也可能通过限制列值转换类型,如我改变A列
public function bindValue(Cell $cell, $value)
{
$column = $cell->getColumn();
if (in_array($column, ['A'])) {
$cell->setValueExplicit($value, DataType::TYPE_STRING);
return true;
}
return parent::bindValue($cell, $value);
}
}
调用
# 处理好的数组
$excel_data = $this->ordersLogic();
# 把数组传入下接下载
return (new OrderExport($excel_data))->download();
导入
php artisan make:import UsersImport --model=Order
简单事例 因我想导入后取到数组,就用了 ToArray
class OrderImport implements ToArray
{
public function array(Array $tables)
{
return $tables;
}
}
调用
# 接到上传文件,调用方法输出数组
$array = Excel::toArray(new OrderImport, request()->file('file'));
dd($array);