在項目開發中 最常用的就是把數據導出成excel的文件報表了
然而新下的項目中啥也沒有;沒有excel的擴展
會報這個錯誤
然后你需要通過composer安裝這個依賴
學習源頭:https://www.jianshu.com/p/4a2457efbf91
excel官方文檔:http://laravelacademy.org/post/2024.html
1,使用Composer安裝依賴
在Laravel項目根目錄下使用Composer安裝依賴:
composer require maatwebsite/excel ~2.1
ps:一定要加上~2.1!!!因為現在已經更新到3.0版本了,如果你不加的話,會安裝最新的3.0版本!等運行時候就會報錯,類似下面這樣的報錯
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)Call to undefined method Maatwebsite\Excel\Excel::create(),
2,安裝后,修改設置
在config/app.php中注冊服務提供者到providers數組:
Maatwebsite\Excel\ExcelServiceProvider::class,
在config/app.php中注冊門面到aliases數組:
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
執行Artisan命令:
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
執行成功后會在config目錄下生成文件excel.php。
修改生成的excel.php文件
大約是在431行,將'to_ascii' => true,改為
'to_ascii' => false,
3、測試Excel文件
創建一個控制器ExcelController.php:
php artisan make:controller ExcelController
然后在routes.php中定義相關路由:
Route::get('excel/export','ExcelController@export');
Route::get('excel/import','ExcelController@import');
然后實現導出、導入功能:
<?php
namespace App\Http\Controllers;
use App\Http\Requests;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Excel;
class ExcelController extends Controller
{
public function export()
{
$cellData = [
['id','姓名','年齡'],
['10001','張三','19'],
['10002','李四','22'],
['10003','王五','23'],
['10004','趙六','19'],
['10005','猴七','22'],
];
$name = iconv('UTF-8', 'GBK', '成員信息');
Excel::create($name,function($excel) use ($cellData){
$excel->sheet('score', function($sheet) use ($cellData){
$sheet->rows($cellData);
});
})->store('xls')->export('xls');
}
public function import(){
$filePath = 'storage/exports/'.iconv('UTF-8', 'GBK', '成員信息').'.xls';
Excel::load($filePath, function($reader) {
$data = $reader->all(); dump($data);
});
exit;
}
}
如果你要導出csv或者xlsx文件,只需將export方法中的參數改成csv或xlsx。
store方法,將該Excel文件保存到服務器上,文件默認保存到storage/exports目錄下,iconv()是為了防止文件名中文亂碼。
訪問 http://youdemain/excel/export
訪問 http://youdemain/excel/import
public function extract(Request $request) { // 請求參數 $status = $request->status ? $request->status : 4; // status(提取狀態) 4 有效-未提取 6 已提取 未提取指的是標記為有效的 $data_id = $request->data_id ? $request->data_id : []; $all_extract = $request->all_extract ? $request->all_extract : 1; // 默認是普通選擇提取 $extract_data = $this->getExtData(4, $data_id, 2); // return Response::json($extract_data); // dd($extract_data); $cellData[0] = ['數據編號','撥打時間','通話時長','手機實號']; foreach($extract_data as $k=>$v){ $cellData[$k+1] = [$v->id ? $v->id : '', $v->dial_time ? date('Y-m-d H:i:s', $v->dial_time) : '', $v->time_len ? $v->time_len : '', $v->kh_phone ? $v->kh_phone : '']; } if ($status == 4) { $status_msg = '未提取'; } else if ($status == 6) { $status_msg = '已提取'; } Excel::create("{$status_msg}數據",function($excel) use ($cellData){ $excel->sheet('score', function($sheet) use ($cellData){ $sheet->rows($cellData); }); })->export('xls'); }