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

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

关于安装

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

关于导入

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

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

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

    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. 导入的时候只读取第一个sheetsweb

    $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->sheetapi

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

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:markdown

    这里是将数组转变为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

相关文章
相关标签/搜索