PHP导出Excel

来源:互联网 发布:js设置onclick事件 编辑:程序博客网 时间:2024/06/11 15:11

调用方法:

$result = [];//数据源
<pre name="code" class="php">$colums = array(array("vender","name"),"city_code","score_weixinhouse","score_uv","score_topic",    "score_activity","score_weixin_send",array("status", function($status){<span style="white-space:pre"></span>return Model_Goods::$status[$status];<span style="white-space:pre"></span>}),array("id",function($id){<span style="white-space:pre"></span>return Arr::path(Model_AdminLog::get_bymodelid($id, "t_goods"), "0.user.screen_name");<span style="white-space:pre"></span>}));

$names = array("商家名称","城市","买房大号得分","流量考核得分","移动专题得分", "活动推广得分","项目服务号得分","XXX","XXX"); output_Excel($result, $colums, $names,"城市考核列表");

值得一提的是,有时候我们需要将某些字段进行简单处理,想得到处理后的结果,或者是数据源的结构不是刚好满足这样的一维数组,

甚至是二维或多维,那么这里可以用回调的方式进行处理:

比如我们注意到:

$colums = array(array("vender","name"),"city_code","score_weixinhouse","score_uv","score_topic",    "score_activity","score_weixin_send",array("status", function($status){<span style="white-space:pre"></span>return Model_Goods::$status[$status];<span style="white-space:pre"></span>}),array("id",function($id){<span style="white-space:pre"></span>Model_AdminLog::get_bymodelid($id)<span style="white-space:pre"></span>}));
这里

1.第一个参数是二维数组,表示从$result['vender']['name']里面取值。

2.倒数第二个参数,是根据$result['status']字段去获取字典,并返回结果。

3.最后一个参数,是根据$result['id']字段去调用

get_bymodelid()方法,获取返回结果




output_Excel方法,支持回调函数:
<pre name="code" class="php">function output_Excel($data,$colums,$names,$name = "未命名"){$objPHPExcel = new PHPExcel();$objPHPExcel->getProperties()->setCreator("das.leju.com");$objPHPExcel->setActiveSheetIndex(0);$char = "A";foreach ($names as $c){$objPHPExcel->getActiveSheet()->setCellValue($char."1", $c);$char = chr(ord($char)+1);}//每一列的宽度,根据需求设置$objPHPExcel->getActiveSheet()->getColumnDimension("A")->setWidth(10);$objPHPExcel->getActiveSheet()->getColumnDimension("B")->setWidth(30);$objPHPExcel->getActiveSheet()->getColumnDimension("C")->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension("D")->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension("E")->setWidth(15);$objPHPExcel->getActiveSheet()->getColumnDimension("F")->setWidth(10);$objPHPExcel->getActiveSheet()->getColumnDimension("G")->setWidth(10);$objPHPExcel->getActiveSheet()->getColumnDimension("H")->setWidth(20);$objPHPExcel->getActiveSheet()->getColumnDimension("I")->setWidth(30);$objPHPExcel->getActiveSheet()->getColumnDimension("J")->setWidth(20);$objPHPExcel->getActiveSheet()->getColumnDimension("K")->setWidth(20);$i = 2;foreach($data as $d){$j = 0;$char = "A";foreach ($colums as $c){if (is_array($c)){//这里如果是如下时间字段会将时间戳格式转为datetime类型if($c[1]=="create_at"||$c[1]=="invisible"||$c[1]=="start"||$c[1]=="end"||$c[1]=="visible"){$objPHPExcel->getActiveSheet()->setCellValue($char . $i,$d[$c[0]][$c[1]]!=""?date("Y-m-d H:i:s",$d[$c[0]][$c[1]]):$d[$c[0]][$c[1]]);}else if(is_callable($c[1])){$objPHPExcel->getActiveSheet()->setCellValue($char . $i,$c[1](preg_match("/\./", $c[0])?Arr::path($d, $c[0]):$d[$c[0]])." ");}else{$objPHPExcel->getActiveSheet()->setCellValue($char . $i, $d[$c[0]][$c[1]]." ");}}else{if($c=="create_at"||$c=="invisible"||$c=="start"||$c=="end"||$c=="visible"){$objPHPExcel->getActiveSheet()->setCellValue($char . $i,$d[$c]!=""?date("Y-m-d H:i:s",$d[$c]):$d[$c]);}else{$objPHPExcel->getActiveSheet()->setCellValue($char . $i, $d[$c]." ");}}$char = chr(ord($char)+1);$j++;}$i++;}$objPHPExcel->getActiveSheet()->getStyle('A1:AE'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);// 设置页方向和规模$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT);$objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);$objPHPExcel->setActiveSheetIndex(0);$timestamp = time();$ua = $_SERVER["HTTP_USER_AGENT"];$encoded_filename = urlencode($name);ob_end_clean(); // Added by meob_start(); // Added by meheader('Content-Type: application/vnd.ms-excel');if (preg_match("/MSIE/", $ua)) {header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');} else if (preg_match("/Firefox/", $ua)) {header('Content-Disposition: attachment; filename="' . $name . '"');} else {header('Content-Disposition: attachment; filename="' . $encoded_filename . '.xls"');}header('Cache-Control: max-age=0');$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');$objWriter->save('php://output');}

这里简单处理了下火狐和IE下文件名乱码问题,因为时间比较紧,有很多多余代码,希望自己整理。


0 0
原创粉丝点击