前提
安裝 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 協議》,轉載必須註明作者和本文連結