Laravel Excel的簡單安裝及使用


  后台操作數據庫時經常會在數據和Excel之間進行大量地導入導出操作,從我的親身經歷來看最近導表也不下百份,以往的shell腳本已經不能滿足現在的需求了,所以剛好就碰到了Laravel Excel這款強大的工具,不過網上的資料也許太多導致之前安裝都出了一些問題,所以專程記錄一下避免以后再繞彎路。

  之前我把Excel數據導入數據庫都是通過shell腳本處理,先把excel的內容拷貝到一個txt文檔里,注意所有的excel單位格必須填充內容(null值填寫為'空'或者'無'),然后所有數據不能換行,並且去除txt文件如 ‘,’’和空格這些符號,最后再用readline方法,以'    '為分隔符獲取每一列的數據:

cat temp.txt|awk 'NR>1'|while read line
do
    myDate=`echo $line|awk -F'    ' '{printf("%s",$1)}'`
    myIn=`echo $line|awk -F'    ' '{printf("%s",$2)}'`
    myOut=`echo $line|awk -F'    ' '{printf("%s",$3)}'`
    remark=`echo $line|awk -F'    ' '{printf("%s",$4)}'`
    'mysql -hxxx -uxxx -pxxx --default-character-set=utf8'-N -e"
   insert into t_record(myDate,myIn,myOut,remark) values('$myDate','$myIn','$myOut','$remark');
  "
done

  這種方法比較復雜,對txt的要求比較高,一旦數據量大一些或者存在換行的情況就十分容易出錯,恰好自己現在開發的項目用到Laravel框架,所以就索性全部用其自帶的Excel來完優化導表過程吧。

  安裝:

  Laravel Excel是一款既可以執行Excel數據導入也可以執行Excel導出的工具,其官方文檔可以參考http://www.maatwebsite.nl/laravel-excel/docs。在安裝這個插件之前首先確保你的電腦或者服務器安裝了composer,沒安裝的可以參考http://www.jianshu.com/p/256547b495c2,當你在命令行下輸入composer出現幾個大大的Composer時說明已經安裝成功了。

  首先打開要添加插件的那個項目的composer.json文件,由於我當時用的是Lavarel4所以在require部分添加''maatwebsite/excel'':''~1.3'',如果是Laravel5則添加    ''maatwebsite/excel'':''~2.1.0'',隨后執行composer update命令就可以把所需要的文件夾下載到你的項目中。值得注意的是如果你只想更新Excel這個插件 可以直接執行   composer update maatwebsite/excel 命令,因為執行composer update會把所有需要更新的內容都update一遍,網絡差,耗時長的情況下簡直是噩夢,所以建議需要哪個東西才更新哪個,不要一下子全部更新了。

  更新成功后,在你的vendor目錄下會出現maatwebsite和phpoffice這兩個文件夾,如果沒有繼續回去更新吧(試試國內的鏡像)。然后在config/app.php內引入兩行說明:

在providers的數組里添加'Maatwebsite\Excel\ExcelServiceProvider'

在aliases里添加'Excel' => 'Maatwebsite\Excel\Facades\Excel'

  最后再在項目的根目錄下執行php artisan config:publish maatwebsite/excel命令,如果是5則執行php artisan vendor:publish就完成整個安裝過程,其實整個過程並不復雜,只要看到那兩個文件夾出現了,就有十之八九了。

  使用:

首先在具體的Controller的Php文件里加上 use Maatwebsite\Excel\Facades\Excel;

然后可以通過創建一個Excel對象或者直接調用Excel類里的方法來實現導出導入功能

//創建對象導入數據(類的話直接使用 Excel::load()方法)
$excel = App::make('excel');//excel類
$excel->load("/temp.xlsx", function($reader) //reader讀取excel內容
{ $reader = $reader->getSheet(0);//excel第一張sheet
    $results = $reader->toArray(); unset($results[0]);//去除表頭
    if ($results) { foreach ($results as $key => $value) { $data = []; $data['myDate'] = $value[0] == null ? '':trim($value[0]); $data['myIn'] = $value[1] == null ? '' : trim($value[1]); $data['myOut'] = $value[2] == null ? '' : trim($value[2]); $data['remark'] = $value[3] == null ? '' : trim($value[3]); $res = DB::table('t_record')->insertGetId($data); } } });
//使用類的方法導出excel
//
創建一個文件並導出 $test='第一個位置'; Excel::create("new.xlsx", function($excel) use($test) { //創建sheet $excel->sheet('sheet1',function($sheet) use($test) { //填充每個單元格的內容 $sheet->cell('A1',function($cell) use ($test) { $cell->setValue($test); }); }); })->export('xls'); //讀取一個文件並導出 Excel::load("new.xlsx", function($excel) { //讀取sheet $excel->sheet('sheet1',function($sheet) { //修改每個單元格的內容 $sheet->cell('A1',function($cell) { $cell->setValue('1'); }); }); })->export('xls');

 

除此之外還有例如為excel設置標題、字體大小、單元格的大小、背景顏色、寬度、高度、水平、垂直居中、外邊距、內邊距等等,功能十分強大,讓你感覺你不僅僅是在導出一個excel而是在寫一個html+css的頁面,具體的需求功能可以參考其API文檔。好了,以后的excel與數據庫的交互不用愁了!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM