laravel excel3.0因为新出来不久,可能很多人没怎么使用过,今天我这个菜鸟就跟大家分享一下我使用过程的心得以及踩过的坑,给后边的开发老铁们提供少许经验。
首先声明,弱想使用laravel excel3.0,务必确保你的laravel框架版本在5.6以上,PHP版本7.2以上(建议大家使用高版本),不然可能没法运作。Excel3.0暂不支持数据的导入功能,在3.1版本才会有此功能,大家使用的时候一定要想好确定是否使用(有新技术的探索精神固然好,但是也要考虑项目的实际需求),对于2.0或2.1系列版本的方法几乎不做任何兼容处理,大家注意不要把2.*系列的方法带到3.0版本了。
这里简单地说一用法吧。
安装:(前提是你安装了composer)
composer require maatwebsite/excel
在app/config注册服务及门面:
'providers' => [
/*
* Package Service Providers...
*/
Maatwebsite\Excel\ExcelServiceProvider::class,
]
'aliases' => [
...
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]
执行命令生成Excel配置文件,自动生成后位于app/excel
php artisan vendor:publish
控制器代码区:
public function export(Excel $excel,Request $request) { //这里可以传参到服务层 return $excel->download(new MobileFee("$beginTime","$endTime","$sendStatus"), '话费金额.xlsx'); return false; }
服务层代码区
namespace App\Tools\Excel; use Maatwebsite\Excel\Concerns\FromCollection; use App\Models\Mobile\MobileOrder; use Maatwebsite\Excel\Concerns\WithHeadings; //设置标题 use Maatwebsite\Excel\Concerns\WithStrictNullComparison; //为空时零填充 use Maatwebsite\Excel\Concerns\ShouldAutoSize; //自动单元格尺寸 use PhpOffice\PhpSpreadsheet\Style\NumberFormat; //设置单元格数据格式 use Maatwebsite\Excel\Concerns\WithColumnFormatting; //设置列格式 class MobileFee implements FromCollection ,WithHeadings,WithStrictNullComparison,WithColumnFormatting,ShouldAutoSize{ public function __construct($beginTime , $endTime , $sendStatus) { $this->beginTime = $beginTime; $this->endTime = $endTime; $this->sendStatus = $sendStatus; if (empty($this->beginTime) && empty($this->endTime) && empty($this->sendStatus)) { $this->beginTime = date('Y-m-d 00:00:00', time()); $this->endTime = date("Y-m-d 00:00:00",strtotime("+1 day")); $this->sendStatus = 13; } } public function headings(): array { return [ //这里填写首行标题 ]; }
//导出数据逻辑 public function collection() { $data = MobileOrder::select(['order_id','from_isp_name','create_time','order_price','provider_price']) ->where('send_status',$this->sendStatus) ->where('create_time','>=',$this->beginTime) ->where('create_time','<',$this->endTime) -> orderBy('create_time', 'desc')->get(); foreach($data as $k => $v){ $data[$k]['li'] = $data[$k]['order_price']-$data[$k]['provider_price']; } return $data; } //设置列格式 public function columnFormats(): array { return [ 'A' => NumberFormat::FORMAT_TEXT, ]; } }
以上就是个人的一点经验所得,希望帮助到有需要的人,官网上说的有些不清不楚,可能英语底子不好的看起来会很吃力,甚至不知所云,这是我的开发小经验,有不足的请多多指教。
对代码有疑问或仍有不清的,可以发送邮件至13480167059@163.com,我会在方便的时候恢复您的每一条留言