PHPExcel入门(基于laravel 5.2)

16 篇文章 0 订阅

简介

PHPExcel 是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格、生成统计图表,非常适合用于做报表。

安装&配置

  1. 该项目的GitHub地址是:https://github.com/Maatwebsite/Laravel-Excel
  2. 使用composer安装 : composer require maatwebsite/excel ~2.0.0(laravel版本不同Excel可能不一样)
安装后的设置
2.1 在config/app.php中注册服务提供者到providers数组:
Maatwebsite\Excel\ExcelServiceProvider::class,
2.2 同样在config/app.php中注册门面到aliases数组:
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
  • 这样PHPExcel就可以在项目中使用,简单的使用可以参考:例子

属性

  public function excel()
    {
        // 数据格式
        $cellData = [
            ['学号','姓名','成绩'],
            ['10001','AAAAA','99'],
            ['10002','BBBBB','92'],
            ['10003','CCCCC','95'],
            ['10004','DDDDD','89'],
            ['10005','EEEEE','96'],
        ];


        // 可以使用create文件名作为第一个参数的方法创建一个新的文件
        Excel::create('学生成绩',function($excel) use ($cellData){


            /***********  表的说明  ***************/
            // 表的标题
            $excel->setTitle('student score');
            // 作者
            $excel->setCreator('zhang')
                  ->setCompany('mathphp');
            // 备注
            $excel->setDescription('A demonstration to change the file properties');
            // 调用PHPExcel的本机方法:呼吁所有的本地PHPExcel方法$excel。
            // $excel->getDefaultStyle();


            // 在新创建的excel文件中创建一个新的工作表,请使用type参数的->sheet('表名')回调LaravelExcelWorksheet
            $excel->sheet('表1', function($sheet) use ($cellData){
                // 调用工作表方法
                // $sheet->protectCells('A1', $password);

                // 从数组中创建一个新的文件,使用
                //->fromArray($source, $nullValue, $startCell, $strictNullComparison, $headingGeneration)在sheet中;
                //或者您可以使用->with()。
                // 空比较:默认情况下,0显示为空单元格。如果要更改此行为,可以将第四个参数作为true:
                $sheet->fromArray(array(
                    array('data1', 'data2'),
                    array('data3', 'data4')
                )); 

        //第一个参数是数组,第2个参数设定的值和数组的值相同则会清除掉,
        //    第3个是从哪一格开始, 第4个是显示0,fasle表示不显示0
        例子:    $cellData = [];
                    foreach ($data as $v) {
                        $cell = [];
                        $cell['ID'] = $v->uid;
                        $cell['昵称'] = $v->nickname;
                        $cellData[] = $cell;
                    }
                 $sheet->fromArray($cellData, null, 'A1', true);
        // 这种输出比 $sheet->rows() 灵活。

                /********** 表格样式 ***********/
                // 如果要更改工作表的一般样式(不是单元格或范围特定),则可以使用该->setStyle()方法。
                $sheet->setStyle(array(
                    'font' => array(
                        'name'      =>  'Calibri',
                        'size'      =>  15,
                        'bold'      =>  true
                    )
                ));
                // $sheet->setFont(array(
                //     'family'     => 'Calibri',
                //     'size'       => '15',
                //     'bold'       => true
                // ));
                // 为工作表设置边框
                // $sheet->setBorder('A1:F10', 'thin');
                // 单元格大小
                // $sheet->setWidth(array(
                //     'A'     =>  5,
                //     'B'     =>  10
                // ));
                // 设置行高
                // $sheet->setHeight(array(
                //     1     =>  50,
                //     2     =>  25
                // ));
                // 设置单元格大小
                // $sheet->setSize(array(
                //     'A1' => array(
                //         'width'     => 50,
                //         'height'    => 500
                //     )
                // ));
                // 默认情况下,导出的文件将自动调整大小。要更改此行为,您可以更改配置或使用设置器:
                // $sheet->setAutoSize(false);
                // $sheet->setAutoSize(array(
                //     'A', 'C'
                // ));
                // 列合并
                // $sheet->mergeCells('A1:E1');
                // 合并列和行
                // $sheet->setMergeColumn(array(
                //     'columns' => array('A','B','C','D'),
                //     'rows' => array(
                //         array(2,3),
                //         array(5,11),
                //     )
                // ));
                // 列格式化
                // $sheet->setColumnFormat(array(
                //     'C' => '0%'
                // ));
                // $sheet->setColumnFormat(array(
                //     'A2:K2' => '0000'
                // ));
                // $sheet->setColumnFormat(array(
                //     'B' => '0',
                //     'D' => '0.00',
                //     'F' => '@',
                //     'F' => 'yyyy-mm-dd',
                // ));


                // *******操纵某行:更改单元格值***************
                $sheet->row(1, array(
                     'test1', 'test2'
                ));
                // 更改行的单元格背景
                $sheet->row(1, function($row) {
                    $row->setBackground('#000000');
                });
                // 追加行,不加第一个参数默认追加到追后
                $sheet->appendRow(6, array(
                    'appended', 'appended'
                ));
                // 前置行
                $sheet->prependRow(1, array(
                    'prepended', 'prepended'
                ));
                // 附加多行
                $sheet->rows(array(
                    array('test1', 'test2'),
                    array('test3', 'test4')
                ));
                // 冻结行
                // $sheet->freezeFirstRow();
                // $sheet->freezeFirstColumn();
                // $sheet->freezeFirstRowAndColumn();
                // $sheet->setFreeze('A2');



                /*********** 单元格操作 ***************/
                $sheet->cell('A1', function($cell) {
                    $cell->setValue('cell1');
                });
                $sheet->cells('A1:A5', function($cells) {
                    $cells->setFontColor('#ffffff');
                    $cells->setBackground('#444');
                    $cells->setFontFamily('Calibri');
                    $cells->setFontSize(16);
                    // 字体统一操作
                    // $cells->setFont(array(
                    //     'family'     => 'Calibri',
                    //     'size'       => '16',
                    //     'bold'       =>  true
                    // ));
                    // 单元格边框
                    $cells->setBorder(array(
                        'top'   => array(
                            'style' => 'solid'
                        ),
                    ));
                    // 水平对齐
                    $cells->setAlignment('center');
                    // 垂直对齐
                    $cells->setValignment('center');
                });
                // 自动过滤
                // $sheet->setAutoFilter();
                // $sheet->setAutoFilter('A1:E10');

                // 默认页边距:可以在配置文件中设置默认的页边距excel::export.sheets。
                //它接受布尔值,单值或数组。要手动设置页边距,可以使用:->setPageMargin()
                $sheet->setPageMargin(array(
                    0.25, 0.30, 0.25, 1
                ));

                $sheet->rows($cellData);

            });

            // 创建多张表:可以在文件中设置任意数量的表格:
            $excel->sheet('表2', function($sheet) use ($cellData){
            // 密码保护工作表(只能读,不能写):一张表可以受密码保护$sheet->protect('密码'):
             $sheet->protect('123', function(\PHPExcel_Worksheet_Protection $protection) {
                    $protection->setSort(true);
                });

                $sheet->rows($cellData);
            });
        // 导出表 ->download('csv') or
        })->export('xls');
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值