Yii 自带的phpexcel导出表格的实现方法



/**
* 通用yii生成excel
* @author: 
* @param string $sheet_title  工作表的名字 sheet name ,  ;【必须】
* @param array $data  要写入excel的二维数组的数据;【必须】
* @param array $attrs  属性数组, 用于描述$data中第2维的字段及其说明;【必须】
* @param string $file_name  生成的xslx文件名/路径;【必须】
*
* @param bool $download   excel是提供下载还是生成文件. 默认提供下载 ;【可选】
* @param array $creatorInfo  excel文档的创建者信息. 【可选】
*
* @example :
$data = array( // 数据
array(
'id'=> '1' ,
'price'=> '3' ,
'name'=> 'dsfkdfj........' ,
'desc'=> 'dfdfdfd' ,
'num'=> '1' ,
'time'=> '' ,
) ,
// ...more
);


$attrs = array( // excel的数据字段及其栏位名称
'price'=> '价格' ,
'id'=> '序号' ,
'name'=> '名称' ,
'desc'=> '描述' ,
'num'=> '数量' ,
'time'=> '时间' ,
);


// 执行
$this -> YiiPhpExcel( 'excel sheet标题' , $data , $attrs , 'test生成文件名' ) ;
*/
protected function YiiPhpExcel( $sheet_title='' , $data=array(  ) , $attrs=array(  )  , $file_name , $download=true , $creatorInfo=array(  ) ) {
// 清空缓冲区 , 避免输出而导致乱码
ob_end_clean();
ob_start();


// yii 载入 PHPExcel
Yii::import('lib.PHPExcel.Writer.Excel2007');
$objPHPExcel = new PHPExcel();


// excel文档的默认属性:创建者信息
$defaultCreator = array(
'Creator'=>'创建人' ,
'LastModify'=>'编辑人' ,
'Title'=>'excel标题' ,
'Subject'=>'项目名称' ,
'Description'=>'描述' ,
'Keywords'=>'关键字' ,
'Category'=>'文档分类' ,
);
$creatorInfo = array_merge( $creatorInfo , $defaultCreator );


$objPHPExcel -> getProperties()
-> setCreator( $creatorInfo['Creator'] )  // 创建人
-> setLastModifiedBy( $creatorInfo['Creator'] ) // 编辑人
-> setTitle( $creatorInfo['LastModify'] ) // excel标题
-> setSubject( $creatorInfo['Subject'] ) // 项目名称
-> setDescription( $creatorInfo['Description'] ) // 描述
-> setKeywords( $creatorInfo['Keywords'] ) // 关键字
-> setCategory( $creatorInfo['Category'] ); // 所属文档分类


// Sheet添加多列 , 及其第1行数据
$ascii = ord( 'A' ) ;
foreach ( $attrs as $v ) {
$alpha = chr( $ascii );
$objPHPExcel -> setActiveSheetIndex(0) -> setCellValue( $alpha.'1', $v );
++$ascii;
}


// 传入数据
if (!empty( $data )) {
$i = 2;
foreach ( $data  as $row ) {
// 为Sheet添加其它行的数据
$ascii = ord( 'A' );
foreach ( $attrs as $key=>$v ) {


$alpha = chr( $ascii );


// 防止excel 对于字符串型数字 变成科学计数法


if(isset($row[ $key ]) && is_string( $row[ $key ] ) ){
$row[ $key ] = ' '.$row[ $key ];
}else{
$row[ $key ] ='';
}
// 设置值
$objPHPExcel -> setActiveSheetIndex(0) -> setCellValue( $alpha.$i , $row[ $key ] );
++$ascii;
}
$i++;
}
}


// 激活列的标题
$objPHPExcel -> getActiveSheet() -> setTitle( $sheet_title );
$objPHPExcel -> setActiveSheetIndex(0);


// 如果文件名没有后缀.xlsx   , 那就加上后缀
if ( strlen( $file_name )-5 > stripos( $file_name , '.xlsx' ) ) {
$file_name .= '.xlsx';
}
// 如果提供下载:让浏览器输出下载
if ( true == $download ) {

$file_name = explode( '/' , $file_name );
$file_name = array_pop( $file_name );


$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
header("Pragma: public");
header("Expires: 0");
// header('Content-Type: application/vnd.ms-excel;charset=utf8'); //
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
header("Content-Disposition:attachment;filename=". $file_name );
header("Content-Transfer-Encoding:binary");
$objWriter -> save("php://output");
}
// 否则:执行生成文件
else {
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save( $file_name );
}


Yii :: app() -> end();
spl_autoload_register(array('YiiBase', 'autoload'));
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值