PHP导出excel

在实现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');
好吧,这上面我没啥好说的。。那就不说了~~哈哈哈~~~反正就能用了~要改导出的名字的话请看倒数第三行~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值