PHP Yii PHPExcel导出 excel文件

来源:互联网 发布:个人交易怎么走淘宝 编辑:程序博客网 时间:2024/05/22 14:15

最近公司项目用到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
原创粉丝点击