js 导出excel_Laravel Excel3.0导出

e9807e9a28af2288e2a0a8b70e717a73.png

php中文网最新课程

每日17点准时技术干货分享

584d58c4f34e54519c73ee784a959d33.png

da3305c16a0845605f4068adc31b92a2.gif

导出方法抽离:

<?php namespace App\Exports;use Maatwebsite\Excel\Concerns\FromCollection;use Maatwebsite\Excel\Concerns\ShouldAutoSize;use Maatwebsite\Excel\Concerns\WithColumnFormatting;use Maatwebsite\Excel\Concerns\WithCustomValueBinder;use Maatwebsite\Excel\Concerns\WithEvents;use Maatwebsite\Excel\Concerns\WithStrictNullComparison;use Maatwebsite\Excel\Events\AfterSheet;use PhpOffice\PhpSpreadsheet\Cell\StringValueBinder;use PhpOffice\PhpSpreadsheet\Style\NumberFormat;class Export extends StringValueBinder implements FromCollection,    ShouldAutoSize,WithColumnFormatting,WithCustomValueBinder,WithStrictNullComparison,WithEvents{    private $row;    private $data;    private $mergeCell;    private $columnName;    private $formatNumber;    /*     * $mergeCell $columnName :合并单元格所需参数;     * $mergeCell 需要合并的位置数组以MAP形式存储 [开始行=>结束行]     * $columnName 需要合并列 与合并行数结合使用ARRAY存储 ['A','B']     */    public function __construct($row,$data,$mergeCell=null,$columnName=null,$formatNumber=[]){        $this->row = $row;        $this->data = $data;        $this->mergeCell = $mergeCell;        $this->columnName = $columnName;        $this->formatNumber = $formatNumber;    }    public function collection(){        $row = $this->row;        $data = $this->data;//设置表头        foreach ($row[0] as $key => $value) {            $key_arr[] = $key;        }//输入数据        foreach ($data as $key => &$value) {            $js = [];            for ($i=0; $i < count($key_arr); $i++) {                $js = array_merge($js,[ $key_arr[$i] => $value[ $key_arr[$i] ] ]);            }            array_push($row, $js);            unset($val);        }        return collect($row);    }    public function registerEvents(): array{        // TODO: Implement registerEvents() method.        if ($this->mergeCell && $this->columnName){            return [                AfterSheet::class => function(AfterSheet $event){                    foreach ($this->columnName as $column){                        foreach ($this->mergeCell as $key=>$value){                            $event->sheet->getDelegate()->mergeCells($column.$key.':'.$column.$value);                        }                    }                }            ];        }        return [];    }    public function columnFormats(): array{        $formatNumber = [];        foreach ($this->formatNumber as $column){            $formatNumber[$column] = NumberFormat::FORMAT_TEXT;        }        return $formatNumber;    }}

使用:

/*表头表体都为二维数组*/$row=[['row1'=>'列1','row2'=>'列2']];/*与表头key对应,缺少数据报错*/$list=[['row1'=>'行1列1','row2'=>'行1列2'],['row1'=>'行2列1','row2'=>'行2列2']];/*将第一行到第三行,第五行到第七行的A,B,C列各自合并*/$mergeCell=[1=>3,5=>7];$columnName=["A","B","C"];/*数字过长的列转换格式防止科学计数*/$formatNumber=['A','B','C'];//上方A,B,C列都为示意,根据自己需求调整,对应EXCEL的列return Excel::download(new Export($row,$list,$mergeCell,$columnName,$formatNumber),'fileName');

d82658045985594b182d21ddc21de826.png

c2e124f38b25c18e4b6c66ef3926f4da.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值