laravel-excel入门导入导出

  • 官方文档

安装 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);

你可能感兴趣的:(laravel-excel入门导入导出)