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();//完成下载
?>