PHP导出Excel

调用方法:

$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 me
	ob_start(); // Added by me
	header('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下文件名乱码问题,因为时间比较紧,有很多多余代码,希望自己整理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值