在Laravel中,可以使用maatwebsite/excel
这个库来处理Excel文件的导入。
1.用命令行窗口打开项目根目录,使用 Composer 安装 maatwebsite/excel
composer require maatwebsite/excel --ignore-platform-reqs
在你的config/app.php
文件中注册服务提供者(可选)
-
'providers' => [
-
// ...
-
Maatwebsite\Excel\ExcelServiceProvider::class,
-
],
注册门面(Facade)(可选)
-
'aliases' => [
-
// ...
-
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
-
],
2. 使用php artisan make:import
命令创建一个新的导入类
php artisan make:import UsersImport --model=User
这将会生成一个新的Import类UsersImport
,并且已经引入了你需要的User
模型。
在生成的UsersImport
类中,你需要定义collection
方法来处理导入的数据集合,以及model
方法来处理单个模型的导入。这里是一个简单的例子:
-
// app/Imports/UsersImport.php
-
namespace App\Imports;
-
use App\Models\User;
-
use Maatwebsite\Excel\Concerns\ToModel;
-
use Maatwebsite\Excel\Concerns\Importable;
-
class UsersImport implements ToModel
-
{
-
use Importable;
-
public function model(array $row)
-
{
-
return new User([
-
'name' => $row[0],
-
'email' => $row[1],
-
'password' => \Hash::make($row[2]),
-
]);
-
}
-
}
3.在控制器中,添加一个方法来处理文件上传,并且调用导入。
-
// app/Http/Controllers/UserController.php
-
namespace App\Http\Controllers;
-
use App\Imports\UsersImport;
-
use Illuminate\Http\Request;
-
class UserController extends Controller
-
{
-
public function import(Request $request)
-
{
-
$request->validate([
-
'file' => 'required|file|mimes:xls,xlsx'
-
]);
-
$file = $request->file('file');
-
$import = new UsersImport();
-
$import->import($file);
-
return "Users imported successfully.";
-
}
-
}
4.定义路由
-
// routes/web.php
-
use App\Http\Controllers\UserController;
-
Route::post('/users/import', [UserController::class, 'import'])->name('users.import');
5.确保表单有enctype="multipart/form-data"
属性,以便正确上传文件。
-
<form action="{{ route('users.import') }}" method="POST" enctype="multipart/form-data">
-
@csrf
-
<input type="file" name="file">
-
<button type="submit">Import</button>
-
</form>