php 导出excel类,PHP excel导出数据封装类

1.首先下载PHPexcel类   下载地址https://archive.codeplex.com/?p=phpexcel

将下载好的文件放在vendor下取名excel

4325dae60b8d3512c92543ad8dd84a5b.png

2.封装导出类

array(//列的属性设置

// 'colName'=>'',//第一行的列名

// 'keyName'=>'',//每一列对应的赋值数组的key值

// 'width'=>'' //A列的宽度

// ),

// //可以以 A B C D E F ....递增

// 'B'=>array(//列的属性设置

// 'colName'=>'',//第一行的列名

// 'keyName'=>'',//每一列对应的赋值数组的key值

// 'width'=>'' //B列的宽度

// ),

// 'C'=>array(//列的属性设置

// 'colName'=>'',//第一行的列名

// 'keyName'=>'',//每一列对应的赋值数组的key值

// 'width'=>'' //C列的宽度

// ),

// 'D'=>array(//列的属性设置

// 'colName'=>'',//第一行的列名

// 'keyName'=>'',//每一列对应的赋值数组的key值

// 'width'=>'' //D列的宽

// )

);

private $rowAttr=array(

// 'firstRowHeight'=>'', //第一行的列名的高度

// 'height'=>''//2-OO无从行的高度

);

private $options=array(

// 'excelname'=>'导出excel', //导出的excel的文件的名称

// 'sheettitle'=>'sheet1', //每个工作薄的标题

'creater'=>'', //创建者,

'lastmodified'=>'', //最近修改时间

'title'=>'office xls document',//当前活动的主题

'subject'=>'office xls document',

'description'=>'数据导出',

'keywords'=>'数据导出',

'category'=>''

);

private $validData=array();

/**

*创建实例自动执行函数

*/

public function __construct($data,$colAttr,$rowAttr,$options,$validData){

/**

*导入文件的位置一定要准确,本人是把放在Vendor下,先在Vendor下建一个excel文件夹

*把下载的PHPExcel文件夹和PHPExcel.php放在excel下.

*/

vendor('excel.PHPExcel');

// dump($this->path);

$aa = $this;

$aa->excel=new \PHPExcel();

// dump($aa->path);

$this->data=$data;

$this->colAttr=array_merge($this->colAttr,$colAttr);

// $this->colAttr= extract(array_merge((array)$this->colAttr, (array)$colAttr));

$this->rowAttr=array_merge($this->rowAttr,$rowAttr);

$this->options=array_merge($this->options,$options);dump($this->rowAttr);

$this->validData=array_merge($this->validData,(array)$validData);

}

/**

* @param data 从数据库取出来的数组

* @param excelname 下载保存的文件名称

* @param sheettitle 脚本的表名称

* @param creater 创作者

*

*/

//设置要注意顺序,先把各种的格式设置好,最后才存入值

//设置属性

public function push(){

$objPHPExcel=$this->excel;

$objPHPExcel->getProperties()

->setCreator($this->options['creater'])

->setLastModifiedBy($this->options['lastmodified'])

->setTitle($this->options['title'])

->setSubject($this->options['subject'])

->setDescription($this->options['description'])

->setKeywords($this->options['keywords'])

->setCategory($this->options['category']);

//设置sheet的name

$objPHPExcel->getActiveSheet()->setTitle($this->options['sheettitle']);

//设置为excel的第一个表

// $objPHPExcel->setActiveSheetIndex(0);

//循环设置样色

// dump($this->colAttr);

foreach($this->colAttr as $key=>$val){

//设置每一列的字体居中显示,必须要同时设置水平居中和垂直居中

$objPHPExcel->getActiveSheet()

->getStyle($key)

->getAlignment()

->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);

$objPHPExcel->getActiveSheet()

->getStyle($key)

->getAlignment()

->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

//设置第一行列名字段

$objPHPExcel->getActiveSheet()->setCellValue($key.'1',$val['colName']);

//设置列宽

if(isset($val['width'])&&!empty($val['width'])){

$objPHPExcel->getActiveSheet()->getColumnDimension($key)->setWidth($val['width']);

}else{

//自动根据字体的长度确定

$objPHPExcel->getActiveSheet()->getColumnDimension($key)->setAutoSize(true);

}

}

//设置第一行高度

if(isset($this->rowAttr['firstRowHeight'])&&!empty($this->rowAttr['firstRowHeight'])){

$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight($this->rowAttr['firstRowHeight']);

}

//循环数组赋值excel单元格

foreach($this->data as $p=>$v){

//行数num,第二行开始

$row=$p+2;

// 设置数据的有效性

// if(isset($this->validData)&&!empty($this->validData)) {

// // 总分数据有效性下拉菜单

// $objValidation1=$objPHPExcel->getActiveSheet()->getCell($this->validData['list1'][0].$row)->getDataValidation();

// $objValidation1->setType(\PHPExcel_Cell_DataValidation::TYPE_LIST);

// $objValidation1->setErrorStyle(\PHPExcel_Cell_DataValidation::STYLE_INFORMATION);

// $objValidation1->setAllowBlank(false);

// $objValidation1->setShowInputMessage(true);

// $objValidation1->setShowErrorMessage(true);

// $objValidation1->setShowDropDown(true);

// // $objValidation1->setErrorTitle('Input error');

// // $objValidation1->setError('Value is not in list.');

// // $objValidation1->setPromptTitle('Pick from list');

// // $objValidation1->setPrompt('Please pick a value from the drop-down list.');

// $objValidation1->setFormula1('"' . $this->validData['list1'][1] . '"');

// $objPHPExcel->getActiveSheet()->getCell('F'.$row)->setDataValidation($objValidation1);

// // 学期数据有效性下拉菜单

// $objValidation2=$objPHPExcel->getActiveSheet()->getCell($this->validData['list2'][0].$row)->getDataValidation();

// $objValidation2->setType(\PHPExcel_Cell_DataValidation::TYPE_LIST);

// $objValidation2->setErrorStyle(\PHPExcel_Cell_DataValidation::STYLE_INFORMATION);

// $objValidation2->setAllowBlank(false);

// $objValidation2->setShowInputMessage(true);

// $objValidation2->setShowErrorMessage(true);

// $objValidation2->setShowDropDown(true);

// // $objValidation2->setErrorTitle('Input error');

// // $objValidation2->setError('Value is not in list.');

// // $objValidation2->setPromptTitle('Pick from list');

// // $objValidation2->setPrompt('Please pick a value from the drop-down list.');

// $objValidation2->setFormula1('"' . $this->validData['list2'][1] . '"');

// $objPHPExcel->getActiveSheet()->getCell('G'.$row)->setDataValidation($objValidation2);

// }

foreach($this->colAttr as $k=>$vo){

/**

*Excel的第A列,uid是你查出数组的键值,下面以此类推

*将数组的值赋值excel的单元格

*/

$objPHPExcel->getActiveSheet()->setCellValue($k.$row, $v[$vo["keyName"]]);

}

/**

*设置行高

*/

if(isset($this->rowAttr['height'])&&!empty($this->rowAttr['height'])){

$objPHPExcel->getActiveSheet()->getRowDimension($row)->setRowHeight($this->rowAttr['height']);

}

}

ob_end_clean(); //清除缓冲区,避免乱码

ob_start(); // Added by me

header('Content-Type: application/vnd.ms-excel');

header('Content-Disposition: attachment;filename="'.$this->options['excelname'].'.xls"');

header('Cache-Control: max-age=0');

$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');

$objWriter->save('php://output');

return true;

exit;

}

}

?>

将封装的导出类放在PHPEexcel.php同级目录下即可

调用实例:

select();

$path = 'excel';

$colAttr=array(

'A'=>array(//列的属性设置

'colName'=>'编号',//第一行的列名

'keyName'=>'id',//每一列对应的赋值数组的key值

'width'=>'20'//每一列的宽度

),

'B'=>array(//列的属性设置

'colName'=>'喜欢谁',//第一行的列名

'keyName'=>'nick_name',//每一列对应的赋值数组的key值

'width'=>'20'//每一列的宽度

),

'C'=>array(//列的属性设置

'colName'=>'爱谁',//第一行的列名

'keyName'=>'property_id',//每一列对应的赋值数组的key值

'width'=>'20'//每一列的宽度

)

);

//行属性参数

$rowAttr=array(

'firstRowHeight'=>'20', //第一行的列名的高度

'height'=>'40'//2-OO无从行的高度

);

//excel表的属性参数

$options=array(

'excelname'=>'你喜欢谁', //导出的excel的文件的名称

'sheettitle'=>'统计', //每个工作薄的标题

);

vendor('excel.Educe');

$ArraryToExcel = new \ArraryToExcel($data,$colAttr,$rowAttr,$options,$path);

$ArraryToExcel->push();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值