Laravel 中使用 Laravel-Excel 美化

:weary: 年底找工作,果然是难找。。。。。

今天分享下laravel中的Maatwebsite/Laravel-Excel简单使用,但是这其实不难的,所以,老鸟勿喷,请继续飞。。。
安装过程就直接看github的就行了,很详细。。。
以下上代码吧,不罗嗦了:

<?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());
            }
    }
}

本来想找个效果图的,奈何服务器一时打不开,后面在补上吧 :imp: :imp: :imp:

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 20
风吹枫落

导出的时候如果数据过多,会提示内存不足,有什么好的解决方案吗

6年前 评论

这个存在.xls.xlsx 的输出问题吗?

6年前 评论

@风吹枫落 试试用数据库的chunk? 不要一次生成 分块处理

6年前 评论
Luff

干嘛要 count($data[0]) + 1 啊,这样会多一列

for ($i = 2; $i <= count($data[0]) + 1; $i++) {
6年前 评论

@QiyueShiyi 我记得当时写好像是排除标题也得,你试试,多的话,你就去掉

6年前 评论

@Ali 不存在啊,这两种格式都支持

6年前 评论

@风吹枫落 可以按@tradzero 的分块处理,也可以考虑按时间分批次导出,或者考虑导出CSV格式

6年前 评论

@风吹枫落 DB::table()->chunk();

6年前 评论

用它导入Excel的时候内存不足,有啥优化方案么。。。。

6年前 评论
zxk

@风吹枫落 trunk ,分块写入。

6年前 评论
zxk

@曾祥康 thunk.

6年前 评论

赶紧补上,欣赏下

6年前 评论

大概的样式就是这个样子吧,

file

然后我修改针对我的数据修改了几个地方的代码,感谢楼主分享!

5年前 评论

@听我说土味情话 朋友,我能看看你的代码吗? 给我发个github地址,借鉴一下如何?

5年前 评论
颠倒的玉石

楼主,导入中文iconv(): Detected an illegal character in input string这个错误怎么处理的呢

5年前 评论

楼主,我这里.csv 正常,.xls,.xlsx都不能下载,提示无法访问,您清楚原因吗?谢谢

5年前 评论

@听我说土味情话 我发现我只能导出csv 也没找到原因

4年前 评论

版本是不是不一样啊,我用Excel::create的时候提示没有这个方法

4年前 评论
xujun0429

单元格内的内容需要换行,怎么操作…… :sob:

4年前 评论
xuri

推荐一个功能丰富、兼容性好、高性能的 Excel 文档基础库:github.com/xuri/excelize

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!