要想在PHP后台實現excel導入導出功能,一種簡單有效的方法就是使用phpexcel插件。
要使用phpexcel插件,首先需要下載composer,這個工具是專門用來管理項目中庫之間的依賴關系的。使用composer下載的phpexcel組件中的類,在項目中的其他文件中都是可以訪問phpexcel的而無需其他use和namespace之類的語句。
$objExcel = new \PHPExcel();注意在調用這個類,新建的時候要加上\,系統會自動定位到phpexcel.php這個文件中去拿到這個類。
在下載composer.phar這個文件的時候,最好翻牆,不翻牆下載十次失敗十次,翻牆后1秒1M,一秒下好。
composer下載地址:https://getcomposer.org/download/
強烈推薦翻牆后再下載。如果沒有能力翻牆可以聯系我,看到后郵箱發給你。
下載好composer.phar后,我們對它進行全局配置。我用的是win8系統,所以這里只講Windows系統下的全局配置。我使用的是xampp工具包,wamp也一樣。將composer.phar放入與php.exe相同的文件夾里。我的是C:\xampp\php。同時在這個文件夾下新建一個名為composer的文本文檔,里面寫進:@php "%~dp0composer.phar" %*
之后將這個文本文件的擴展名txt改為bat。

添加完成上述步驟后,再將該路徑添加到系統的環境變量中。win8操作方法如下:我的電腦->右擊->屬性->高級系統設置->環境變量->雙擊path->在變量值中添加;C:\xampp\php
這是我的composer所在的路徑,你注意添加的路徑是你自己的路徑,而不是這里的示例。


進行到這里,composer全局配置便完成了。為了驗證我們真的完成了composer的全局配置,可在命令行里的任意路徑下輸入composer,若命令行里打印出了composer大字,便說明我們全局配置成功了。

之后,我們需要composer從中國鏡像網下載資源,而不是原本的外網。我也試圖使用composer從外網下載所需的資源,結果不管翻不翻牆都下載失敗,所以對composer進行配置使它從國內鏡像網下載資源是很有必要的一件事情。
方法可參考這里:https://pkg.phpcomposer.com/
我簡單講解一下使用國內鏡像配置。在命令行使用cd C:\xampp\htdocs\laravelDemo 你注意這里改成你自己的項目根目錄。
然后在命令行的根目錄下輸入
composer config repo.packagist composer https://packagist.phpcomposer.com
回車后,配置便完成了。此時打開項目跟目錄下的composer.json文件會發現里面增加了這部分內容:

當然你也可以手動在這個文件中添加這些內容。
到此我們便完成了composer的配置可以使用它來下載phpexcel組件了。可以參考這里的內容:http://www.tuicool.com/articles/ziY7Vv
使用Composer安裝依賴
首先在Laravel項目根目錄下使用Composer安裝依賴:在命令行項目的根目錄下操作
composer require maatwebsite/excel ~2.0.0
安裝后在項目中的設置:
在 config/app.php 中注冊服務提供者到 providers 數組:
Maatwebsite\Excel\ExcelServiceProvider::class,
同樣在 config/app.php 中注冊門面到 aliases 數組:
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
至此便可以在項目中使用phpexcel組件了。
附上使用例程。
導出Excel文件
為了演示Laravel Excel相關功能,我們為本測試創建一個干凈的控制器 ExcelController.php:
php artisan make:controller ExcelController --plain
然后在 routes.php 中定義相關路由:
Route::get('excel/export','ExcelController@export'); Route::get('excel/import','ExcelController@import');
接下來我們先在 ExcelController.php 中定義 export 方法實現導出功能:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; use Excel; class ExcelController extends Controller { //Excel文件導出功能 By Laravel學院 public function export(){ $cellData = [ ['學號','姓名','成績'], ['10001','AAAAA','99'], ['10002','BBBBB','92'], ['10003','CCCCC','95'], ['10004','DDDDD','89'], ['10005','EEEEE','96'], ]; Excel::create('學生成績',function($excel) use ($cellData){ $excel->sheet('score', function($sheet) use ($cellData){ $sheet->rows($cellData); }); })->export('xls'); } }
我們在瀏覽器中訪問 http://laravel.app:8000/excel/export ,會導出一個名為 學生成績.xls 的Excel文件:

如果你要導出csv或者xlsx文件,只需將 export 方法中的參數改成csv或xlsx即可。
如果還要將該Excel文件保存到服務器上,可以使用 store 方法:
Excel::create('學生成績',function($excel) use ($cellData){ $excel->sheet('score', function($sheet) use ($cellData){ $sheet->rows($cellData); }); })->store('xls')->export('xls');
文件默認保存到 storage/exports 目錄下,如果出現文件名中文亂碼,將上述代碼文件名做如下修改即可:
iconv('UTF-8', 'GBK', '學生成績')
導入Excel文件
我們將剛才保存到服務器上的Excel文件導入進來,導入很簡單,使用 Excel 門面上的 load方法即可:
//Excel文件導入功能 By Laravel學院
public function import(){ $filePath = 'storage/exports/'.iconv('UTF-8', 'GBK', '學生成績').'.xls'; Excel::load($filePath, function($reader) { $data = $reader->all(); dd($data); }); }
load 方法基於項目根路徑作為根目錄,同樣我們對中文進行了轉碼,否則會提示文件不存在。
在瀏覽器中訪問 http://laravel.app:8000/excel/import ,頁面顯示如下:

當然,Laravel Excel還有很多其它功能,比如將Blade視圖導出為Excel或CSV,以及對導入/導出更加細粒度的控制,具體可參考其官方文檔: http://www.maatwebsite.nl/laravel-excel/docs
例程中的路由控制器注意要用自己的url路徑。
