下面由laravel教程栏目给大家介绍laravel excel3.0导出方法,希望对需要的朋友有所帮助!
导出方法抽离:
<?phpnamespace 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');
以上就是laravel excel3.0如何导出的详细内容。
