在实现excel的导出的时候,总是遇到这样或者那样的问题
php 有自带的方式来导出excel 那就是定义一个php文件来echo出你想要输出的table
Header( "Content-type:application/vnd.ms-excel ;charset=utf-8"); Header( "Content-Disposition:attachment;filename=abnormal_Report.xls "); echo "<table width='100%' border='1' >"; echo"<tr>"; echo "<th style='color:red' align='center'>姓名</th>"; echo "<th style='color:red' align='center'>部门</th>"; echo "<th style='color:red' align='center'>职位</th>"; echo "<th style='color:red' align='center'>学院</th>"; echo "<th style='color:red' align='center'>年级</th>"; echo "<th style='color:red' align='center'>电话</th>"; echo "<th style='color:red' align='center'>短号</th>"; echo "<th style='color:red' align='center'>QQ</th>"; echo "</tr>";
echo "</table>";但是这种方式会使得你在打开excel的时候会有报错,说是不属于excel的文件格式,但是当你打开的时候你会发现其实是能用的,这确实是能用的,excel会自动帮你解析,能解析出来但是在他的心里面还是觉得你不是他们的同类,就像混血儿一样,不属于我的种族但是我能认识你。
但这样并不是很好的处理方式,而且用这种法方实现的excel其他的地方更没有边框,需要你进去之后对view进行操作,操作完成后才会有显示,在现实这边就不说了,百度上都有一搜就知道。
而后就是主题了,导出的方式在外部插件被实现了,有人写了PHPexcel来实现excel 的支持,他有很强大的功能来实现excel的操作,就是确实是有点大。。。。写的人也是辛苦。
phpexcel 在下载好后就导入包就好了和其他的一样
include '../phpexcel/Classes/PHPExcel.php';我是就放在了www目录下,路径自己处理。
下面就开始疯狂的操作了。
先定义一个新的excel
$excel = new PHPExcel();
然后就往里面塞数据了,第一行表示的是你要写数据的列,当然你也可以不存在数组里,可以直接在后面写。
第二行大家都知道,一坨没用的数据,然后为了美观我把每一列数据都居中了一下,在循环里面有一个$letter[$i]1 不要怀疑我写错了,小t可是跑过的,这就是前面说第几列第一行的东西,A1,B1,C1以此类推是不是瞬间就想去建一个数组了。
$letter = array('A','B','C','D','E','F','G','H'); $tableheader = array('姓名', '部门', '职位', '学院', '年级', '电话', '短号', 'QQ'); $objactivitysheet = $excel->getActiveSheet(); for($i = 0;$i < count($tableheader);$i++) { $excel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]"); $objactivitysheet->getStyle("$letter[$i]1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); }
这里就是广大人民喜欢的表格的宽的设置了,不设的话就下载后自己慢慢拉吧~其实我还是很乐意看到大家这么干的~哟嚯嚯嚯~ $excel->getActiveSheet()->getColumnDimension('A')->setWidth(20); $excel->getActiveSheet()->getColumnDimension('B')->setWidth(20); $excel->getActiveSheet()->getColumnDimension('C')->setWidth(20); $excel->getActiveSheet()->getColumnDimension('D')->setWidth(50); $excel->getActiveSheet()->getColumnDimension('E')->setWidth(20); $excel->getActiveSheet()->getColumnDimension('F')->setWidth(20); $excel->getActiveSheet()->getColumnDimension('G')->setWidth(20); $excel->getActiveSheet()->getColumnDimension('H')->setWidth(20);然后就是往里塞数据了
$i = 1; 别看了,$result你找不到的,这是从数据库里拿出来的东西,用数组也行就能直接往里塞的,不要虚一切觉得合理的都往里塞就对了~,然后有没有看见第一个地方有一个空格加点的小t加了个空格因为我去名字还有前导零这玩意我也是醉了。。然后我很贱的加了个空格然后居中嘿嘿,你们就看不出来了~妥妥的~ foreach($results as $result){ $i++; $value = $result["nickname"]; $objactivitysheet->setCellValue("$letter[0]$i" ," " . "$value", PHPExcel_Cell_DataType::TYPE_STRING); $value = $result[8]; $objactivitysheet->setCellValue("$letter[1]$i" , "$value", PHPExcel_Cell_DataType::TYPE_STRING); $value = $result[9]; $objactivitysheet->setCellValue("$letter[2]$i" , "$value", PHPExcel_Cell_DataType::TYPE_STRING); $value = $result[11]; $objactivitysheet->setCellValue("$letter[3]$i" , "$value", PHPExcel_Cell_DataType::TYPE_STRING); $value = $result["grade"]; $objactivitysheet->setCellValue("$letter[4]$i" , "$value", PHPExcel_Cell_DataType::TYPE_STRING); $value = $result["phone"]; $objactivitysheet->setCellValue("$letter[5]$i" , "$value", PHPExcel_Cell_DataType::TYPE_STRING); $value = $result["short_number"]; $objactivitysheet->setCellValue("$letter[6]$i" , "$value", PHPExcel_Cell_DataType::TYPE_STRING); $value = $result[1]; $objactivitysheet->setCellValue("$letter[7]$i" , "$value", PHPExcel_Cell_DataType::TYPE_STRING); for($j = 0; $j < 8; $j++){ $objactivitysheet->getStyle("$letter[$j]$i")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); } }一切就绪之后就可以导出excel了!
$write = new PHPExcel_Writer_Excel5($excel); header("Pragma: public"); header("Expires: 0"); header("Cache-Control:must-revalidate, post-check=0, pre-check=0"); header("Content-Type:application/force-download"); header("Content-Type:application/vnd.ms-execl"); header("Content-Type:application/octet-stream"); header("Content-Type:application/download");; header('Content-Disposition:attachment;filename="testdata.xls"'); header("Content-Transfer-Encoding:binary"); $write->save('php://output');好吧,这上面我没啥好说的。。那就不说了~~哈哈哈~~~反正就能用了~要改导出的名字的话请看倒数第三行~~