PHP实现导出带样式的Excel
工作中做导出的时候,需要导出自定义的表格或嫌弃导出的Excel格式太难看了。
需要设置颜色、字号大小、加粗、合并单元格等等。
效果图:
PHP代码:
/** *导出文件 *@returnstring */ publicfunctionexport() { $file_name="成绩单-".date("Y-m-dH:i:s",time()); $file_suffix="xls"; header("Content-Type:application/vnd.ms-excel"); header("Content-Disposition:attachment;filename=$file_name.$file_suffix"); //根据业务,自己进行模板赋值。 $this->display(); }
HTML代码:
<htmlxmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"> <head> <metahttp-equiv=Content-Typecontent="text/html;charset=utf-8"> <metaname=ProgIdcontent=Excel.Sheet> <metaname=Generatorcontent="MicrosoftExcel11"> </head> <body> <tableborder=1cellpadding=0cellspacing=0width="100%"> <tr> <tdcolspan="5"align="center"> <h2>成绩单</h2> </td> </tr> <tr> <tdstyle='width:54pt'align="center">编号</td> <tdstyle='width:54pt'align="center">姓名</td> <tdstyle='width:54pt'align="center">语文</td> <tdstyle='width:54pt'align="center">数学</td> <tdstyle='width:54pt'align="center">英语</td> </tr> <tr> <tdalign="center">1</td> <tdstyle="background-color:#00CC00;"align="center">Jone</td> <tdstyle="background-color:#00adee;"align="center">90</td> <tdstyle="background-color:#00CC00;"align="center">85</td> <tdstyle="background-color:#00adee;"align="center">100</td> </tr> <tr> <tdalign="center">2</td> <tdstyle="background-color:#00CC00;"align="center">Tom</td> <tdstyle="background-color:#00adee;"align="center">99</td> <tdstyle="background-color:#00CC00;"align="center">85</td> <tdstyle="background-color:#00adee;"align="center">80</td> </tr> </table> </body> </html>
我们再来看一个更方便的组件
在这里需要用到PEAR的两个软件包SpreadsheetExcelWriter和OLE,如果没有可以分别从http://pear.php.net/package/Spreadsheet_Excel_Writer/和http://pear.php.net/package/OLE/下载,解压放在PEAR目录下。
全部代码如下:
<?php include'Writer.php'; /****准备导出的数据****/ $head='OneWeekSchedule'; $data=array('Monday'=>array(array('time'=>'09:00','event'=>'公司例会例会'), array('time'=>'14:00','event'=>'部门例会') ), 'Tuesday'=>array(array('time'=>'09:30','event'=>'和Mr.Stinsen早餐')), 'Wednesday'=>array(array('time'=>'12:10','event'=>'市场中阶报告'), array('time'=>'15:30','event'=>'市场部战略部署会议')), 'Thursday'=>array(array('time'=>'','event'=>'')), 'Friday'=>array(array('time'=>'16:00','event'=>'WoCStock研讨会'), array('time'=>'17:00','event'=>'飞往华尔街'), array('time'=>'21:00','event'=>'会见克林顿')) ); /********/ $workbook=newSpreadsheet_Excel_Writer(); $filename=date('YmdHis').'.xls';//csv $workbook->send($filename);//发送Excel文件名供下载 $workbook->setVersion(8); $sheet=&$workbook->addWorksheet("Sheet1");//创建工作表 $sheet->setInputEncoding('utf-8');//字符集 $headFormat=&$workbook->addFormat(array('Size'=>14,'Align'=>'center','Color'=>'white','FgColor'=>'brown','Bold'=>'1','Border'=>'1'));//定义格式 $dayFormat=&$workbook->addFormat(array('Size'=>12,'Align'=>'center','VAlign'=>'vcenter','FgColor'=>'green','Color'=>'white','Border'=>'1'));//定义格式 $dataFormat=&$workbook->addFormat(array('Size'=>10,'Align'=>'left','Border'=>'1','Color'=>'black','FgColor'=>'cyan'));//定义格式 $sheet->setColumn(0,0,20);//设置宽度 $sheet->setColumn(1,1,15);//设置宽度 $sheet->setColumn(2,2,30);//设置宽度 $r=0; $sheet->write(0,$r,$head,$headFormat);//表格标题 $sheet->mergeCells(0,0,0,2);//跨列显示 $r++;//数据从第2行开始 foreach($dataas$day=>$events){ $c=0; $sheet->write($r,$c,$day,$dayFormat); if(!$events){ //当天没有计划 $r++; }else{ $startRow=$r; foreach($eventsas$e){ $c=1; $sheet->write($r,$c++,$e['time'],$dataFormat);//工作表写入数据 $sheet->write($r,$c++,$e['event'],$dataFormat);//工作表写入数据 $r++; } //合并$day单元格 $sheet->mergeCells($startRow,0,$r-1,0); } } $workbook->close();//完成下载 ?>