一、封装 Excel 导出类
include/components/ExecExcel.php
<?php/*** * @Excel 导入导出类。 */class ExecExcel { /*** * @导出方法 * @$font excel第一行的提示信息, * 要求:一定要与数据库中取出的字段对应 * $data 数据库取出的数据 * 要求:只能传递需要导出的字段,否则会数据错乱。 */ public static function Export($font,$data){ //@获得对象 $Obj=ExecExcel::getObject(); //@获得当前活动 sheet 操作对象 $objSheet=$Obj->excel->getActiveSheet(); //@获得操作的表格字母 $letter=$Obj->getLetter($font); //@设置当前 sheet 名称 $objSheet->setTitle("dakayungou"); //@Excel写入头部提示信息 foreach ($font as $ak=>$av){ $objSheet->setCellValue($letter[$ak].'1',$av); } //@Excel写入数据 foreach ($data as $dk=>$dv){ $num=$dk+2; $dv=array_values($dv); foreach ($dv as $k=>$d){ //@自动设置单元格宽度 $objSheet -> getColumnDimension($letter[$k]) -> setAutoSize(true); //@设置单元格为文本格式 $objSheet->getStyle($letter[$k])->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT); $objSheet->setCellValueExplicit($letter[$k].$num,$d,PHPExcel_Cell_DataType::TYPE_STRING); } } //@销毁变量 unset($data); unset($font); //@header头声明为下载 header('Content-Type:application/vnd.ms-excel'); header('Content-Disposition:attachment;filename=demo.xls'); header('Cache-Control:max-age=0'); //@传入当前实例对象,生成指定格式文件 $objWrite=PHPExcel_IOFactory::createWriter($Obj->excel,'Excel5'); //@输出到浏览器 $objWrite->save("php://output"); } //@获取对应字母方法 protected function getLetter($font){ //@生成26个字母 $letter=range('A','Z'); //@计算字母长度 $letter_long=count($letter); //@存储遍历好的数据 $array=array(); //@遍历数组 foreach ($font as $k=>$f){ $temp=''; //@如果长度大于26 $last=substr($k/$letter_long,0,1); if($last>0){ $temp.=$letter[$last-1]; } $temp.=$letter[$k%$letter_long]; $array[$k]=$temp; } //@销毁变量 unset($font); //@返回拼接好的数组 return $array; } //@用来存储该对象 private static $object; //@用来保存Excel对象 protected $excel=null; //@ //@ private function __construct(){ Yii::import('application.vendors.*'); require 'PHPExcel.php'; $this->excel= new PHPExcel(); } //@私有克隆 private function __clone(){ } //@获取对象方法 public static function getObject(){ if(self::$object instanceof self){ return self::$object; }else{ return self::$object=new self; } }}
二、封装执行sql文件
include/components/ExecSql.php
<?php/*** * @执行 sql 类。 */class ExecSql { //@执行sql方法【获取所有】 public static function All($sql){ //@获得数据库对象 $connection = Yii::app()->db; //@执行传递过来的sql return $connection->createCommand($sql)->queryALL(); } //@执行sql方法【获取第一条】 public static function One($sql){ //@获得数据库对象 $connection = Yii::app()->db; //@执行传递过来的sql return $connection->createCommand($sql)->queryRow(); }}
三、控制器层代码
<?php class OrderController extends JController{ public function actionExport() { //@获得下载的数据id $ids=isset($_POST['ids'])?htmlentities($_POST['ids']):0; //@判断id合法性 if (!$ids) { $this->error("参数错误请重试"); die; } //@去除两边的逗号 $ids=trim($ids,','); //@拼接sql $sql='select name,phone,first,second,third,address,remark,orderno from `orders_win` where id in('.$ids.')'; //@获取所有数据 $all=ExecSql::All($sql); //@判断数据合法性 if(empty($all)){ $this->error("参数错误请重试"); die; } //@excel第一行显示信息 $font=array('姓名','联系号码','省','市','区','地址','备注','订单号'); //@调用导出 ExecExcel::Export($font,$all); }}