您现在的位置: 365建站网 > 365文章 > PHP实现导出带样式的Excel(自定义表格样式)

PHP实现导出带样式的Excel(自定义表格样式)

文章来源:365jz.com     点击数:795    更新时间:2017-08-11 09:42   参与评论

工作中做导出的时候,需要导出自定义的表格或嫌弃导出的Excel格式太难看了。

需要设置颜色、字号大小、加粗、合并单元格等等。

效果图:


PHP代码:

</>code

  1. /**
  2. * 导出文件
  3. * @return string
  4. */
  5. public function export()
  6. {
  7. $file_name = "成绩单-".date("Y-m-d H:i:s",time());
  8. $file_suffix = "xls";
  9. header("Content-Type: application/vnd.ms-excel");
  10. header("Content-Disposition: attachment; filename=$file_name.$file_suffix");
  11. //根据业务,自己进行模板赋值。
  12. $this->display();
  13. }

HTML代码:

</>code

  1. <html xmlns:o="urn:schemas-microsoft-com:office:office"
  2. xmlns:x="urn:schemas-microsoft-com:office:excel"
  3. xmlns="http://www.w3.org/TR/REC-html40">
  4. <head>
  5. <meta http-equiv=Content-Type content="text/html; charset=utf-8">
  6. <meta name=ProgId content=Excel.Sheet>
  7. <meta name=Generator content="Microsoft Excel 11">
  8. </head>
  9. <body>
  10. <table border=1 cellpadding=0 cellspacing=0 width="100%" >
  11. <tr>
  12. <td colspan="5" align="center">
  13. <h2>成绩单</h2>
  14. </td>
  15. </tr>
  16. <tr>
  17. <td style='width:54pt' align="center">编号</td>
  18. <td style='width:54pt' align="center">姓名</td>
  19. <td style='width:54pt' align="center">语文</td>
  20. <td style='width:54pt' align="center">数学</td>
  21. <td style='width:54pt' align="center">英语</td>
  22. </tr>
  23. <tr>
  24. <td align="center">1</td>
  25. <td style="background-color: #00CC00;" align="center">Jone</td>
  26. <td style="background-color: #00adee;" align="center">90</td>
  27. <td style="background-color: #00CC00;" align="center">85</td>
  28. <td style="background-color: #00adee;" align="center">100</td>
  29. </tr>
  30. <tr>
  31. <td align="center">2</td>
  32. <td style="background-color: #00CC00;" align="center">Tom</td>
  33. <td style="background-color: #00adee;" align="center">99</td>
  34. <td style="background-color: #00CC00;" align="center">85</td>
  35. <td style="background-color: #00adee;" align="center">80</td>
  36. </tr>
  37. </table>
  38. </body>
  39. </html>

我们再来看一个更方便的组件

在这里需要用到PEAR的两个软件包 Spreadsheet Excel Writer 和 OLE,如果没有可以分别从 http://pear.php.net/package/Spreadsheet_Excel_Writer/http://pear.php.net/package/OLE/ 下载,解压放在PEAR目录下。

全部代码如下:

</>code

  1. <?php
  2. include 'Writer.php';
  3. /* *** 准备导出的数据 *** */
  4. $head = 'One Week Schedule';
  5. $data = array('Monday' => array( array('time' => '09:00', 'event' => '公司例会例会'),
  6. array('time' => '14:00', 'event' => '部门例会')
  7. ),
  8. 'Tuesday' => array( array('time' => '09:30', 'event' => '和 Mr. Stinsen 早餐')),
  9. 'Wednesday' => array(array('time' => '12:10', 'event' => '市场中阶报告'),
  10. array('time' => '15:30', 'event' => '市场部战略部署会议') ),
  11. 'Thursday' => array( array('time' => '', 'event' => '')),
  12. 'Friday' => array( array('time' => '16:00', 'event' => 'WoC Stock 研讨会'),
  13. array('time' => '17:00', 'event' => '飞往华尔街'),
  14. array('time' => '21:00', 'event' => '会见克林顿'))
  15. );
  16. /* *** *** */
  17. $workbook = new Spreadsheet_Excel_Writer();
  18. $filename = date('YmdHis').'.xls';//csv
  19. $workbook->send($filename); // 发送 Excel 文件名供下载
  20. $workbook->setVersion( 8 );
  21. $sheet = &$workbook->addWorksheet("Sheet1"); // 创建工作表
  22. $sheet->setInputEncoding('utf-8'); // 字符集
  23. $headFormat = &$workbook->addFormat(array('Size' => 14, 'Align' => 'center','Color' => 'white', 'FgColor' => 'brown', 'Bold'=>'1', 'Border' => '1'));//定义格式
  24. $dayFormat = &$workbook->addFormat(array('Size' => 12, 'Align' => 'center', 'VAlign' => 'vcenter', 'FgColor' => 'green', 'Color' => 'white', 'Border' => '1'));//定义格式
  25. $dataFormat = &$workbook->addFormat(array('Size' => 10, 'Align' => 'left', 'Border' => '1', 'Color' => 'black', 'FgColor'=> 'cyan'));//定义格式
  26. $sheet->setColumn(0, 0, 20); // 设置宽度
  27. $sheet->setColumn(1, 1, 15); // 设置宽度
  28. $sheet->setColumn(2, 2, 30); // 设置宽度
  29. $r = 0;
  30. $sheet->write(0, $r, $head, $headFormat); // 表格标题
  31. $sheet->mergeCells(0, 0, 0, 2); // 跨列显示
  32. $r++; // 数据从第2行开始
  33. foreach ($data as $day => $events){
  34. $c = 0;
  35. $sheet->write($r, $c, $day, $dayFormat);
  36. if (!$events){
  37. // 当天没有计划
  38. $r++;
  39. } else {
  40. $startRow = $r;
  41. foreach ($events as $e){
  42. $c = 1;
  43. $sheet->write($r, $c++, $e['time'], $dataFormat); // 工作表写入数据
  44. $sheet->write($r, $c++, $e['event'], $dataFormat); // 工作表写入数据
  45. $r++;
  46. }
  47. // 合并 $day 单元格
  48. $sheet->mergeCells($startRow, 0, $r - 1, 0);
  49. }
  50. }
  51. $workbook->close(); // 完成下载
  52.  ?>

 

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (795人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号