关于laravel5的excel包maatwebsite/excel的使用笔记_v1.0_byKL

关于laravel5的excel包maatwebsite/excel的使用笔记

关于安装

官网已经很详细了,不再描述.
http://www.maatwebsite.nl/laravel-excel/docs/getting-started

关于导入

导入的话只有几个小地方需要注意:

  1. 导入的时候会有产生一些null的cells

    $reader->ignoreEmpty();
    //or
    //在循环遍历导入的数据的时候主动忽略null
  2. 关于中文或者乱码问题

    Excel::load('filename.csv', function($reader) {
    
    }, 'UTF-8');
    或者在配置文件 excel.php(在安装这个模块的文档有介绍怎么生成这个文件)
    
    
     /*
            |--------------------------------------------------------------------------
            | Sheet heading conversion
            |--------------------------------------------------------------------------
            |
            | Convert headings to ASCII
            | Note: only applies to 'heading' settings 'true' && 'slugged'
            |
            */
    
            'to_ascii'                => false, //主要修复一些乱码
    
            /*
            |--------------------------------------------------------------------------
            | Import encoding
            |--------------------------------------------------------------------------
            */
    
            'encoding'                => array(
    
                'input'  => 'UTF-8', //中文识别
                'output' => 'UTF-8'
    
            ),
  3. 导入的时候只读取第一个sheets

            $reader = Excel::load($file);
    
            $postDataFilter = [];
    
            $excelArray = $reader->first()->toArray();
    多个表的话
    
    Excel::batch('app/storage/uploads', function($sheets, $file) {
            
        $sheets->each(function($sheet) {//这里的$sheet变量就是sheet对象了,excel里的每一个sheet
    
        });
    
    });

关于导出

需要先关注一下导出的时候maatwebsite/excel是使用什么数据的

$result2 = array( //这个代表sheet本身
    array('data1', 'data2'), //这里代表一行 row,里面的数据就是横向分布的每一个row的cell
    array('data3', 'data4') //这里是第二行row
);

这里需要注意的是多个sheet的话,不能直接在数组里面写,要创建多个 $excel->sheet

上面是关于导出数组的构成结构,下面是关于导出的函数需要注意的地方,至于如何完整使用,官方文档说得还算是很清晰的

public function excelExport(){
//这里需要使用use来传递变量给内部闭包,这里假设$result2是一个要转换成excel的数组数据
    Excel::create('testexcel', function ($excel) use ($result2, $apiHost) {
            $excel->sheet('Sheetname', function ($sheet) use ($result2, $apiHost){

                // Sheet manipulation
                //需要注意的地方1
                $sheet->fromArray($result2, null, 'A1', false, false);   
                //需要注意的地方2                 
                foreach ($result2 as $index=>$item) {
                    if($index == 0 ){ //排除标题row
                        continue;
                    }
                    //J2:J代表excel的读取多个cell的写法,写过excel编程的不陌生
                    $sheet->getHyperlink('J2:J' . (count($result2) + 1))->setUrl($item['url']);
                }
            });
        })->export('xlsx');
}
  1. 地方1:

    这里是将数组转变为sheet的命令,`->fromArray($source, $nullValue, $startCell, $strictNullComparison, $headingGeneration)`
    
    这里需要关注最后一个参数:`$headingGeneration`,默认是打开的,默认会将数组的keys导出,并且在第一行开始,但是一般我们第一行是用做标题的,所以需要关闭,这是例子写法:
    
    $sheet->fromArray($data, null, 'A1', false, false);
    那么我们做标题时候还需要手动写入一个标题的row,例如这里是以$result2为例
    
    $tmpHeader = [
                'id',
                '名称',
                '标签',
                //......
            ];
    $result2[] = $tmpHeader;//将导出数组的第一个元素作为标题,不过需要注意,在构建这个导出数组的时候,真正的数据要从索引1开始,因为0已经是标题了
    
  2. 地方2:

    这里是将一个cell设置为可点击的网页链接的
    
    这是标准例子
    $sheet->getCell('E26') //获得cell
        ->getHyperlink() //获取Hyperlink对象
        ->setUrl('http://examle.com/uploads/cv/' . $cellValue) //设置url
        ->setTooltip('Click here to access file'); //这里可以不管,只是提示信息
    这里是phpexcel的方法,其实laravel-excel是封装在phpexcel上面的,所以大概的方法都差不多
    //对比参考一下
    //这是设置url跳转的
    $objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net');
    $objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('http://www.phpexcel.net');
    
    //这是设置在sheet内部跳转的
    $objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net');
    $objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl("sheet://'Sheetname'!A1");
    那么这里个例子里面是设置单例的,如果我们要设置整个数组的某一列的都变成可点击的话,就需要用循环遍历数组然后,循环seturl了
    

参考:

  1. 官网

  2. https://github.com/Maatwebsite/Laravel-Excel/issues/926

  3. Change a cell into a clickable URL

    原文作者:线上猛如虎
    原文地址: https://segmentfault.com/a/1190000008624533
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞