laravel 导出插件
轉(zhuǎn)發(fā):https://blog.csdn.net/gu_wen_jie/article/details/79296470
版本:laravel5
? ? ? ? ? php 5.6
安裝步驟:
一、安裝插件
①、首先在Laravel項(xiàng)目根目錄下使用Composer安裝依賴:
composer require "maatwebsite/excel:~2.1.0"
②、在config/app.php中注冊(cè)服務(wù)提供者到providers數(shù)組:
Maatwebsite\Excel\ExcelServiceProvider::class,
?
③、在config/app.php中注冊(cè)門面到aliases數(shù)組:
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
④、建議你生成Laravel Excel的配置文件,使用如下命令:
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
?
然后你會(huì)發(fā)現(xiàn)在config目錄下有一個(gè)excel.php文件?
你可以打開看一下大概的配置項(xiàng),主要就是緩存,表單,和導(dǎo)入,導(dǎo)出的一些設(shè)置。
?
二、使用
①、創(chuàng)建路由:
//Excel導(dǎo)出 Route::get('/excel/export','Member\MemberController@export')->name('/excel/export');
//Excel導(dǎo)入 Route::get('/excel/import','Member\MemberController@import')->name('/excel/import');?
1-1、導(dǎo)出的方法:
<?phpnamespace App\Http\Controllers\Member;use App\Http\Controllers\BaseController; use App\Model\Member\MemberFollow; use Illuminate\Http\Request; use Illuminate\Database\QueryException; use Excel;class MemberController extends BaseController {/**** Excel導(dǎo)出*/public function export(){ini_set('memory_limit','500M');set_time_limit(0);//設(shè)置超時(shí)限制為0分鐘$cellData = MemberFollow::select('xt_name','sex','face')->limit(5)->get()->toArray();$cellData[0] = array('昵稱','性別','頭像');for($i=0;$i<count($cellData);$i++){$cellData[$i] = array_values($cellData[$i]);$cellData[$i][0] = str_replace('=',' '.'=',$cellData[$i][0]);}//dd($cellData);Excel::create('用戶信息',function($excel) use ($cellData){$excel->sheet('score', function($sheet) use ($cellData){$sheet->rows($cellData);});})->export('xls');die;} }我來對(duì)上面的代碼進(jìn)行解釋下。
a. ini_set設(shè)置內(nèi)存溢出大小和超時(shí)時(shí)間是因?yàn)槲业臄?shù)據(jù)量比較大,不想直接去php.ini中修改,所以直接在這設(shè)置。你也可以修改excel.php配置項(xiàng)中的緩存大小,適當(dāng)調(diào)整。
b. 首先你得需要知道cellData是一個(gè)二維數(shù)組,并且二維數(shù)組中的每一個(gè)一維數(shù)組必須是索引數(shù)組才行,這樣格式上才能正確。
所以,我對(duì)我查詢出的$cellData先進(jìn)行了toArray()轉(zhuǎn)化操作。然后我讓你看下查詢出的結(jié)構(gòu),因?yàn)槲覀償?shù)組表中的每個(gè)列都是一個(gè)字段,所以決定了一維數(shù)組是關(guān)聯(lián)數(shù)組,需要去鍵處理。
for循環(huán)處理后就是:
?
??for循環(huán)中的另一個(gè)
php
$cellData[$i][0] = str_replace('=',' '.'=',$cellData[$i][0]);
這個(gè)地方是比較坑的一個(gè)地,因?yàn)镋xcel單元格當(dāng)你的導(dǎo)出數(shù)據(jù)中某個(gè)列的某個(gè)值第一個(gè)字符是等號(hào)“=”,他就會(huì)進(jìn)行計(jì)算處理,然后就報(bào)錯(cuò)了。比如我到處的某個(gè)昵稱是“=陽光”,我就吧等號(hào)匹配替換為空格加等號(hào)了
其實(shí)本不需要進(jìn)行匹配替換的,因?yàn)樵趀xcel.php文件中有配置項(xiàng),但是我配置了并不生效,后續(xù)找到更好的解決方法會(huì)及時(shí)更新,或者有哪位知道了可以指點(diǎn)一下。 ?
默認(rèn)情況下,計(jì)算公式的單元格將被計(jì)算。我設(shè)置為false沒生效。所以匹配替換。
如果你要導(dǎo)出csv或者xlsx文件,只需將export方法中的參數(shù)改成csv或xlsx即可。也可以進(jìn)行連貫操作直接將導(dǎo)出的文件直接保存到服務(wù)器上。?
使用store方法:
ok,導(dǎo)出完成。
?
2-1 導(dǎo)入:
導(dǎo)入我們可以直接用第一步注冊(cè)的門面Excel門面上的load方法
/**** Excel導(dǎo)入*/public function import(){$filePath = 'storage/exports/'.iconv('UTF-8', 'GBK', '用戶信息').'.xls';Excel::load($filePath, function($reader) {$data = $reader->all();dd($data);});}ok,導(dǎo)入完成。
?
轉(zhuǎn)載于:https://www.cnblogs.com/sz-xioabai/p/9765382.html
總結(jié)
以上是生活随笔為你收集整理的laravel 导出插件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。