php - 无法理解 WithMultipleSheets 如何在 Laravel Excel 3.1 中工作
问题描述
我无法理解如何使用 WithMultipleSheets 进行导入。当我只用一张纸使用 xls 文件时,我没有导入任何问题,但是有很多张我得到了错误
Class App\Imports\XLSImport contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Maatwebsite\Excel\Concerns\ToCollection::collection)
我有以下文件结构 App\Imports\XLSImport.php
<?php
namespace App\Imports;
use App\Category;
use App\News;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithCalculatedFormulas;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
use App\Imports\CategoryImport;
use App\Imports\NewsImport;
class XLSImport implements ToCollection, WithHeadingRow, WithCalculatedFormulas, WithMultipleSheets
{
public function sheets(): array
{
DB::statement('SET FOREIGN_KEY_CHECKS = 0');
return [
'categories'=> new CategoryImport(),
'news' => new NewsImport(),
];
DB::statement('SET FOREIGN_KEY_CHECKS = 1');
}
}
App\Imports\CategoryImport.php
<?php
namespace App\Imports;
use App\Category;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithCalculatedFormulas;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class CategoryImport implements ToCollection, WithHeadingRow, WithCalculatedFormulas, WithMultipleSheets
{
public function collection(Collection $rows)
{
Category::truncate();
foreach ($rows as $row)
{
Category::create([
'id' => $row['id'],
'parent_id' => $row['parent_id'],
'level' => $row['level'],
'type' => $row['type'],
'menutype' => $row['menutype'],
'title' => $row['title'],
'sef' => $row['sef'],
'class' => $row['class'],
'body' => $row['body'],
'image' => $row['image'],
'metatitle' => $row['metatitle'],
'metakey' => $row['metakey'],
'metadesc' => $row['metadesc'],
]);
}
}
}
应用\进口\NewsImport.php
<?php
namespace App\Imports;
use App\News;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithCalculatedFormulas;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class NewsImport implements ToCollection, WithHeadingRow, WithCalculatedFormulas, WithMultipleSheets
{
public function collection(Collection $rows)
{
News::truncate();
foreach ($rows as $row)
{
News::create([
'category_id'=> $row['category_id'],
'title' => $row['title'],
'sef' => $row['sef'],
'introtext' => $row['introtext'],
'fulltext' => $row['fulltext'],
'image' => $row['image'],
'metatitle' => $row['metatitle'],
'metakey' => $row['metakey'],
'metadesc' => $row['metadesc'],
'hits' => $row['hits'],
'created_at' => $row['created_at'],
]);
}
}
}
App\Admin\Controllers\SeedController.php
<?php
namespace App\Admin\Controllers;
use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\Dashboard;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Content;
use Encore\Admin\Layout\Row;
use App\Imports\XLSImport;
use Maatwebsite\Excel\Facades\Excel;
class SeedController extends Controller
{
public function index(Content $content)
{
Excel::import(new XLSImport, 'seeder.xlsm');
return $content
->title('Import & Export')
->description('Laravel excel');
}
}
解决方案
推荐阅读
- javascript - 从长字符串制作短哈希
- javascript - React/Node js 应用程序在开发中工作,但在生产中不工作。不断收到“POST https://phlatt.herokuapp.com/send 404(未找到)”错误
- sql - 如何创建客户优惠券组合
- javascript - 快速验证器检查输入是否是可用选项之一
- python - 满足前一个行条件时的条件逐行填充
- c++ - 用 C++ 编写递归基类概念
- azure - Azure 通知中心异常:无法注册设备条目.. 请求无法完成
- apache-nifi - 如何评估 NiFi RouteOnAttribute 中的“节点地址”
- mysql - MySQL全文搜索不返回特定案例的结果
- .net - dotnet Entity Framework 三个实体之间的关系