首页 > 解决方案 > 无法理解 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');

    }

}

标签: phplaravelmaatwebsite-excellaravel-excel

解决方案


推荐阅读