laravel excel3.0系列

    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,我会在方便的时候恢复您的每一条留言


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值