Maatwebsite/excel的简单使用

Laravel Excel 官网地址

安装

要求

安装前必须确认以下要求

  • PHP: ^ 7.2|^8.0
  • Composer: ^2.*
  • Laravel: ^5.8
  • PhpSpreadsheet: ^1.15
  • php_zip启用PHP扩展
  • php_xml启用PHP扩展
  • php_gd2启用PHP扩展
  • php_iconv启用PHP扩展
  • php_simplexml启用PHP扩展
  • php_xmlreader启用PHP扩展
  • php_zlib启用PHP扩展

安装

进入项目根目录

cd {project_path}
# 默认安装最新版本
composer require maatwebsite/excel

Maatwebsite\Excel\ExcelServiceProvider是自动发现并默认注册。

如果要自己注册,请在config/app.php以下位置添加ServiceProvider

'providers' => [
    /*
     * Package Service Providers...
     */
    Maatwebsite\Excel\ExcelServiceProvider::class,
]

Excel facade 也是自动发现。

如果要手动添加,请在中添加外观config/app.php

'aliases' => [
    ...
    'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]

要发布配置,请运行provider的发布命令:

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config

这将创建一个名为的新配置文件config/excel.php

快速导出

创建一个Excel类

可以通过make:export 创建Excel命名空间及对应的Excel处理类.

php artisan make:export EnrollExport--model=Volunteer

执行命令后会创建以下文件

├── app
│   ├── Exports
│   │   ├── EnrollExport.php
│ 
└── composer.json

生成导出内容

EnrollExport.php 是所有导出文件的处理,数据处理、单元格样式等等
根据下列的情况EnrollExport需要继承不同的接口,如果不继承则对应的设置不会生效

  • Eloquent ORM中导入数据,继承FromCollection
  • 调整列宽,继承WithColumnWidths
  • 调整样式,继承WithStyles
<?php

namespace App\Exports;

use App\Models\ActivityEnrollLog;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnWidths;
use Maatwebsite\Excel\Concerns\WithStyles;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;

class EnrollExport implements FromCollection, WithColumnWidths, WithStyles
{
    public $data;//需要导出的数据

    public function __construct($data) {
        $this->data = $data;
    }

    /**
     * 组合表头和数据
     * @return \Illuminate\Support\Collection
     * @author wanghongrui 20210330
     */
    public function collection()
    {
        $collect = collect([]);
        $thead = collect([
                '志愿者编号',
                '姓名',
                '电话',
                '活动名称',
                '报名时间',
                '取消时间',
                '报名状态'
            ]);
        $collect->push($thead);
        foreach ($this->data as $d) {
            $rowData = collect([
                $d->volunteer->v_number,
                $d->volunteer->name,
                $d->volunteer->phone,
                $d->activity->active_name,
                $d->enroll_time,
                $d->cancel_time,
                $d->status_str,
            ]);
            $collect->push($rowData);
        }
        return $collect;
    }

    /**
     * 设置列宽
     *
     * @return array
     * @author wanghongrui 20210330
     */
    public function columnWidths(): array
    {
        return [
            'A' => 15, 'B' => 20, 'C' => 30, 'D' => 50, 'E' => 20, 'F' => 20, 'G' => 10,
        ];
    }

    /**
     * 格式化列
     * @return array
     */
//    public function columnFormats(): array
//    {
//        $format = NumberFormat::FORMAT_NUMBER_00;//金额保留两位小数
//        return ['G' => $format, 'H' => $format, 'I' => $format, 'J' => $format, 'K' => $format];
//    }

    /**
     * 单元格样式设置
     *
     * @param Worksheet $sheet
     * @author wanghongrui 20210330
     */
    public function styles(Worksheet $sheet)
    {
        $sheet->getDefaultRowDimension()->setRowHeight(22);//设置行高
        $sheet->getStyle('A1:G'.($this->data->count()+1))->getAlignment()->setVertical('center');//垂直居中
        $sheet->getStyle('A1:G'.($this->data->count()+1))->applyFromArray(['alignment' => ['horizontal' => 'center']]);//设置水平居中
    }
}

下载导出文件

生成的导出文件直接通过Excel::download()进行下载

return Excel::download(new EnrollExport($data), '志愿者报名信息表.xlsx');

.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用 dcat admin 和 maatwebsite/excel 导入数据的步骤如下: 1. 安装 maatwebsite/excel 依赖包,可以使用 composer 命令进行安装: ``` composer require maatwebsite/excel ``` 2. 在 dcat admin 中创建一个数据表,并在该表对应的 Model 中添加 `use Maatwebsite\Excel\Concerns\ToModel;` 和 `use Maatwebsite\Excel\Concerns\WithHeadingRow;` 引用。 3. 创建一个实现 `ToModel` 接口的类,该类负责将 Excel 中的数据转换为 Model 实例。例如: ```php <?php namespace App\Imports; use App\Models\User; use Maatwebsite\Excel\Concerns\ToModel; use Maatwebsite\Excel\Concerns\WithHeadingRow; class UsersImport implements ToModel, WithHeadingRow { public function model(array $row) { return new User([ 'name' => $row['name'], 'email' => $row['email'], 'password' => bcrypt($row['password']), ]); } } ``` 4. 在 dcat admin 中创建一个导入数据的页面,并对页面进行配置,如下所示: ```php use App\Imports\UsersImport; use Maatwebsite\Excel\Facades\Excel; // ... $form->file('import_file', '导入文件'); // ... $form->footer(function ($footer) { $footer->disableReset(); $footer->disableSubmit(); $footer->addButton('导入', [ 'class' => 'btn btn-primary', 'onclick' => <<<JS var formData = new FormData(); formData.append('import_file', $('#import_file')[0].files[0]); $.ajax({ url: '{$this->getResource()}/import', headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: formData, type: 'POST', cache: false, contentType: false, processData: false, success: function (data) { Dcat.success(data.message); }, error: function (xhr, textStatus, errorThrown) { Dcat.error(xhr.responseJSON.message || '操作失败'); } }); JS, ]); }); ``` 5. 在控制器中添加导入数据的方法: ```php public function import(Request $request) { $file = $request->file('import_file'); Excel::import(new UsersImport, $file); return response()->json([ 'message' => '导入成功', ]); } ``` 以上就是使用 dcat admin 和 maatwebsite/excel 导入数据的基本步骤。需要注意的是,以上代码仅作为参考,具体实现可能会有所不同,具体实现应根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知飞到哪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值