PHP Yii PHPExcel导出 excel文件

最近公司项目用到YII框架,由于此前并没有接触过YII框架,所以对这个各种不熟悉,然后项目有个需求就是需要把CGridView查询(搜索)的数据导出来(导出Excel文件),网上搜索都是用PHPExcel,弄这个弄了两天左右(楼主我太愚钝了所以才用了这么久),下面我说说我在做这个的过程中遇到的一些问题吧!

一、无法传值到后台

开始做的时候,不知道怎么把该怎么把那些数据的ID传给后台,用尽各种办法,最后经老大点拨,发现自己钻进了死胡同,然后就很快解决了这个问题了,下面是我把cGridView 中搜索出来的数据 中的ID传到后台的解决方法。(通过JS传的话只能传当前页的数据ID,暂时没想到什么其他方法

<script type="text/javascript">

	$("#export").click(function () {<span style="font-family: Arial, Helvetica, sans-serif;">	</span>
		$.each(
			$.fn.yiiGridView.getColumn('deal-grid',0),
			function(i){
			<span style="white-space:pre">	</span>arr_id[i] = $(this).html();
			}
		)
		window.location.href="<?php echo $this->createUrl('Export'); ?>?arr_id="+arr_id;

	});
</script>

  这个时候把成功的把ID传到后台去了,至于怎么查那就靠自己了,下面是我把数据写入Excel表中

<span style="white-space:pre">	</span>$objectPHPExcel = new PHPExcel();
	$objectPHPExcel->setActiveSheetIndex(0); //设置第一个工作表为活动工作表

	$objectPHPExcel->getActiveSheet()->setTitle('理财产品列表'); //设置工作表名称

	$letter = array('B','C','D','E','F','G','H','I');//excel 字母 位置
	$name = array(
		array('ID','借款名称','借款分类','添加时间','借款总额','年利率','招标日期','结束日期')
	); //报表表头标题
	$width = array('12','17','10','20','12','10','12','12');//设置每列的宽度
	$list_arr = array(array());
	foreach ($data as $k=>$list){
		$list_arr[$k] = array(''.$list->id.'',''.$list->name.'',''.$list->cate_name.'',''.date("Y-m-d H:i:s",$list->create_time).'',
			<span style="white-space:pre">	</span>''.$list->borrow_amount.'',''.$list->rate.'',''.$list->start.'',''.$list->end.'');
	}
	//将数据和报表标题合并 并转换成二维数组
	$news_arrs = array_merge($name,$list_arr);
	//写入多行数据 到报表中
	foreach ($news_arrs as $k=>$list){
		$k = $k+1;
		//写入数据
		for ($a=0;$a<count($letter);$a++) {
			$objectPHPExcel->getActiveSheet()->setCellValue(''.$letter[$a].''.($k),$list[$a]);
			$objectPHPExcel->getActiveSheet()->getColumnDimension(''.$letter[$a].'')->setWidth(''.$width[$a].'');
		}
	}
	//设置居中
	for ($i=0;$i <= count($data)+1;$i++){
		$objectPHPExcel->getActiveSheet()->getStyle('B'.$i.':O'.$i.'')
				->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
	}<pre name="code" class="php"><span style="white-space:pre">	</span>//创建一个新的工作表,并命名
	$msgWorkSheet = new PHPExcel_Worksheet($objectPHPExcel,''.$result[0]->deal_name.'');
	$objectPHPExcel->addSheet($msgWorkSheet);//插入工作表
	$objectPHPExcel->setActiveSheetIndex($i+1); //切换到新的工作表

	//excel 字母 位置
	$letters = array('B','C','D','E','F','G','H','I','J','K','L','M','N','O');
	//报表表头标题 二维数组
	$names = array(
		array('ID','产品名','投标时间','标截止日期','投标人ID','用户名','账号类型','推荐人',
							'手机号','投标金额','使用红包','已收益','待收益','是否支付')
	);
	$widths = array('12','17','20','20','15','15','15','15','15','17','17','17','17','17');//设置每列的宽度
	$list_arrs = array(array());
	foreach ($result as $ks=>$lists){
	<span style="white-space:pre">	</span>$list_arrs[$ks] = array(''.$lists->id.'',''.$lists->deal_name.'',''.$lists->create_time.'',''.$lists->deal_end.'',
					''.$lists->user_id.'', ''.$lists->user_name.'', ''.($lists->is_test==0)?'√':'测试号'.'', ''.$lists->parent_name.'',
					''.$lists->mobile.'', ''.$lists->money.'', ''.DealLoad::user_redpaper($lists->id,$lists->order_id).'', ''.$lists->load_repay_money.'',
					''.$lists->load_wait_repay_money.'',''.($lists->Payment==1)?'已支付':'未支付'.'',  );
	}

	//将数据和报表标题合并 并转换成二维数组
	$news_arr = array_merge($names,$list_arrs);
	//写入多行数据 到报表中
	foreach ($news_arr as $k=>$list){
		$k = $k+1;
		//写入数据
		for ($a=0;$a<count($letters);$a++) {
			<span style="white-space:pre">	</span>$objectPHPExcel->getActiveSheet()->setCellValue(''.$letters[$a].''.($k),$list[$a]);
			<span style="white-space:pre">	</span>$objectPHPExcel->getActiveSheet()->getColumnDimension(''.$letters[$a].'')->setWidth(''.$widths[$a].'');
		<span style="white-space:pre">	</span>}
		}

 

导出数据到这基本就好了,还有最那个结尾我就不写了,在这最后测试的时候遇到一个问题就是用IE11导出的时候 文件名中文乱码,解决方法:

//文件名中文乱码
if(preg_match("/MSIE/", $ua)) { //MSIE 只对ie10 以下有用
   header('Content-Disposition:attachment;filename="'.$encoded_filename.'".xls');
}else if (preg_match("/Firefox/", $ua)){
   header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '".xls');
}else {
   header('Content-Disposition: attachment; filename="' . $encoded_filename . '".xls');
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值