工作中做导出的时候,需要导出自定义的表格或嫌弃导出的Excel格式太难看了。
需要设置颜色、字号大小、加粗、合并单元格等等。
效果图:
PHP代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/** * 导出文件 * @return string */ public function export() { $file_name = "成绩单-" . date ( "Y-m-d H: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代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
< html xmlns:o = "urn:schemas-microsoft-com:office:office" xmlns:x = "urn:schemas-microsoft-com:office:excel" xmlns = "http://www.w3.org/TR/REC-html40" > < head > < meta http-equiv = Content -Type content = "text/html; charset=utf-8" > < meta name = ProgId content = Excel .Sheet> < meta name = Generator content = "Microsoft Excel 11" > </ head > < body > < table border = 1 cellpadding = 0 cellspacing = 0 width = "100%" > < tr > < td colspan = "5" align = "center" > < h2 >成绩单</ h2 > </ td > </ tr > < tr > < td style = 'width:54pt' align = "center" >编号</ td > < td style = 'width:54pt' align = "center" >姓名</ td > < td style = 'width:54pt' align = "center" >语文</ td > < td style = 'width:54pt' align = "center" >数学</ td > < td style = 'width:54pt' align = "center" >英语</ td > </ tr > < tr > < td align = "center" >1</ td > < td style = "background-color: #00CC00;" align = "center" >Jone</ td > < td style = "background-color: #00adee;" align = "center" >90</ td > < td style = "background-color: #00CC00;" align = "center" >85</ td > < td style = "background-color: #00adee;" align = "center" >100</ td > </ tr > < tr > < td align = "center" >2</ td > < td style = "background-color: #00CC00;" align = "center" >Tom</ td > < td style = "background-color: #00adee;" align = "center" >99</ td > < td style = "background-color: #00CC00;" align = "center" >85</ td > < td style = "background-color: #00adee;" align = "center" >80</ td > </ tr > </ table > </ body > </ html > |
我们再来看一个更方便的组件
在这里需要用到PEAR的两个软件包 Spreadsheet Excel Writer 和 OLE,如果没有可以分别从 http://pear.php.net/package/Spreadsheet_Excel_Writer/ 和 http://pear.php.net/package/OLE/ 下载,解压放在PEAR目录下。
全部代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
<?php include 'Writer.php' ; /* *** 准备导出的数据 *** */ $head = 'One Week Schedule' ; $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' => 'WoC Stock 研讨会' ), array ( 'time' => '17:00' , 'event' => '飞往华尔街' ), array ( 'time' => '21:00' , 'event' => '会见克林顿' )) ); /* *** *** */ $workbook = new Spreadsheet_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 ( $data as $day => $events ){ $c = 0; $sheet ->write( $r , $c , $day , $dayFormat ); if (! $events ){ // 当天没有计划 $r ++; } else { $startRow = $r ; foreach ( $events as $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(); // 完成下载 ?> |