官网已经很详细了,再也不描述.
http://www.maatwebsite.nl/laravel-excel/docs/getting-startedphp
导入的话只有几个小地方须要注意:laravel
导入的时候会有产生一些null的cellsgit
$reader->ignoreEmpty(); //or //在循环遍历导入的数据的时候主动忽略null
关于中文或者乱码问题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' ),
导入的时候只读取第一个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->sheet
api
上面是关于导出数组的构成结构,下面是关于导出的函数须要注意的地方,至于如何完整使用,官方文档说得还算是很清晰的数组
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: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:闭包
这里是将一个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了
参考: