透過Maatwebsite/Laravel-Excel匯入資料-import

透過Maatwebsite/Laravel-Excel匯入資料-import

Maatwebsite/Laravel-Excel – import

Laravel-Excel 是一個在Laravel 內處理Excel的套件。使用方法挺容易的,官網教學也清楚,這邊簡單介紹一下匯入功能。匯出功能的部份有空在來談談。

安裝

利用 composer安裝

composer require maatwebsite/excel "~2.1.0"

config/app.php內加入 ServiceProvider

Maatwebsite\Excel\ExcelServiceProvider::class,

你也可以加入aliases內使用 facade 功能。

'Excel' => Maatwebsite\Excel\Facades\Excel::class,

加入excel.php設定

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"

使用

因為筆者目前有個需求是要匯入excel表轉成資料欄位並儲存起來,所以就簡單介紹一下匯入功能。

當你把資料從前端post過來時,你可以從$request內去取得暫存路徑。

$path = $request->excel

接著透過Laravel-Excelload方法去讀取excel 內的檔案。

//用get(), all()都可以
Excel::load($path)->get();
Excel::load($path)->all();

取出來的資料會是collection,您匯入的檔案有多個工作表(sheet),匯出的資料會多包一層sheet。

若您只想要取第一張表的資料可以參考以下作法。

//可參照Maatwebsite\Excel\Execl
//讀取第一個工作表的方法。
Excel::selectSheetsByIndex(0)->load($path)->get();
Excel::load($path)->first();

若您想要對資料做一些修正,load內也提供了callback的方法

Excel::load($path, function ($reader){
//reader method..
});

詳細reader 的方法可以參照LaravelExcelReader

另外如果你想先處理部分資料後回傳回來可以透過以下方式:

$result = ''
Excel::load($path, function ($reader) use (&$result){
$result = ...
});

匯入處理的部份大概就到這邊,其他資訊可以參照文件。匯出的部份有空在來寫一篇吧。

備註:

如果您在正式環境上傳excel 檔案時發現錯誤訊息Class 'ZipArchive' not found,那你可能就要安裝zip.so這個extension。

首先我們先檢查一下是否真的沒有這個套件,再終端機輸入:

php -ini

後尋找extension_dir所指向的內容,並確認是否沒有zip.so這個extension。接著安裝zip.so,可參考內容,若您是使用 php5.6版及ubuntu的話,可以輸入:

//OS:ubuntu, php version:5.6, web server:apache
sudo apt-get install php5.6-zip //安裝
sudo service apache2 restart //重啟

此時應該可以正常運作了。