DcatAdmin 簡單實現匯入Excel

Slowlyo發表於2022-04-12

前提

安裝 dcat/easy-excel

composer require dcat/easy-excel

或者你想用maatwebsite/excel之類的其他的工具也可以, 差不太多看個人喜好

實現

新建一個工具表單, 用來上傳Excel
文件

<?php

namespace App\Admin\Forms;

use Dcat\EasyExcel\Excel;
use Dcat\Admin\Widgets\Form;

class TestImportForm extends Form
{
    /**
     * Handle the form request.
     *
     * @param array $input
     *
     * @return \Dcat\Admin\Http\JsonResponse
     */
    public function handle(array $input)
    {
        // 獲取上傳的檔案路徑
        $file_path = storage_path('app/public' . $input['import_file']);

        // 如果用的是maatwebsite/excel或者其他, 把讀取資料這一步改改就好了
        // 讀取excel檔案
        $data = Excel::import($file_path)->toArray();
        // [
        //     "Sheet1" => [
        //         2 => [
        //             "姓名" => "張三",
        //             "電話" => 123456789,
        //         ],
        //         3 => [
        //             "姓名" => "李四",
        //             "電話" => 987654321,
        //         ],
        //     ],
        // ]

        // 處理資料
        //...

        // 入庫
        //...

        return $this->response()->success('ok')->refresh();
    }

    /**
     * Build a form here.
     */
    public function form()
    {
        // 禁用重置表單按鈕
        $this->disableResetButton();

        // 檔案上傳
        $this->file('import_file', ' ')
            ->disk('public')
            ->accept('xls,xlsx')
            ->uniqueName()
            ->autoUpload()
            ->move('/import')
            ->help('支援xls,xlsx');
    }
}

新建一個Action, 用來下載匯入模板
文件

<?php

namespace App\Admin\Actions;

use Dcat\Admin\Actions\Action;
use Dcat\Admin\Actions\Response;

/**
 * 下載匯入模板
 * Class DownloadTemplate
 *
 * @package App\Admin\Actions
 */
class DownloadTemplate extends Action
{
    /**
     * @return string
     */
    protected $title = '<button class="btn btn-primary"><i class="feather icon-download"></i> 下載匯入模板</button>';


    /**
     * Handle the action request.
     *
     * @return Response
     */
    public function handle()
    {
        return $this->response()->download('你的匯入模板.xlsx');
    }

}

在列表增加操作按鈕
文件

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new User(), function (Grid $grid) {
            // 在工具欄新增操作按鈕,用於上傳Excel檔案及下載匯入模板
            $grid->tools(function (Grid\Tools $tools) {
                $tools->append(Modal::make()
                    // 大號彈窗
                    ->lg()
                    // 彈窗標題
                    ->title('上傳檔案')
                    // 按鈕
                    ->button('<button class="btn btn-primary"><i class="feather icon-upload"></i> 匯入資料</button>')
                    // 彈窗內容
                    ->body(TestImportForm::make()));
                    // 下載匯入模板
                    $tools->append(DownloadTemplate::make()->setKey('test_question'));

            });

            $grid->column('id')->sortable();
            $grid->column('name');
            $grid->column('email');
            // ...
        });
    }

效果


本作品採用《CC 協議》,轉載必須註明作者和本文連結
海到無涯天作案,山登絕頂我為峰

相關文章