Laravel 中使用 Laravel-Excel 美化

复制代码
复制代码
<?php

use Maatwebsite\Excel\Classes\LaravelExcelWorksheet;
use Maatwebsite\Excel\Exceptions\LaravelExcelException;
use Maatwebsite\Excel\Facades\Excel;
use Maatwebsite\Excel\Writers\CellWriter;
use Maatwebsite\Excel\Writers\LaravelExcelWriter;
use PHPExcel_Exception;

trait HandlerExcelTrait
{
    /**
     * @var array
     */
    protected $cellLetter = [
        'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q',
        'R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD',
        'AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN',
        'AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ'
    ];

    /**
     * $data = Array(
     *  [0] => Array(
     *      [0] => 序号
     *      )
     *  [1] => Array(
     *      [id] => 1
     *      )
     *  )
     * $title = ['测试']
     * @param string $fileName
     * @param array $title
     * @param array $data
     * @return mixed
     * @throws LaravelExcelException
     */
    public function exportExcel(string $fileName, array $title, array $data)
    {
            try {
            return Excel::create($fileName, function ($excel) use ($data, $title) {
                    /** @var LaravelExcelWriter $excel */
                    $excel->sheet('sheet', function ($sheet) use ($data, $title) {
                            /** @var LaravelExcelWorksheet $sheet */
                            $column = $this->cellLetter[count($data[0]) - 1];

                            try {
                                    $sheet->fromArray($data, null, 'A1', true, false);
                            } catch (PHPExcel_Exception $e) {
                                    throw new LaravelExcelException($e->getMessage());
                            }

                /** 此为设置整体样式 */
                            $sheet->setStyle([
                                    'font' => [
                                            'name' => 'Calibri',
                                            'size' => 12,
                                            'bold' => false,
                                    ]
                            ])
                                ->prependRow($title)
                                ->row(1, function ($row) {
                                        /** @var CellWriter $row */
                                        $row->setFont(array(   //设置标题的样式
                                                'family' => 'Calibri',
                                                'size' => '16',
                                                'bold' => true
                                        ));
                                })
                                ->mergeCells('A1:' . $column . '1')
                                ->cell('A2:' . $column . '2', function ($cells) {
                                        /** @var CellWriter $cells */
                                        $cells->setBackground('#AAAAFF');
                                })->setHeight(1, 30)
                                ->setAutoFilter('A2:' . $column . '2');  //设置自动过滤

                    /** 此为针对每行的高宽进行设置 */
                        for ($i = 2; $i <= count($data[0]) + 1; $i++) {
                                $sheet->setHeight($i, 20);
                                $sheet->setWidth($this->cellLetter[$i - 1], 30);
                                $sheet->row($i - 1, function ($row) {
                                        /** @var CellWriter $row */
                                        $row->setAlignment('center');
                                        $row->setValignment('center');
                                });
                        }
                });
                    })->export('xlsx');
            } catch (LaravelExcelException $e) {
                    throw new LaravelExcelException($e->getMessage());
            }
    }
}
复制代码

原文:https://learnku.com/articles/7095/laravel-excel-beautification-in-laravel

posted @   牛奔  阅读(2360)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示