PHP实现导出带样式的Excel


Posted in PHP onAugust 28, 2016

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

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

效果图:

PHP代码:

/**
* 导出文件
* @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代码:

<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目录下。

全部代码如下:

<?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(); // 完成下载
 ?>
PHP 相关文章推荐
PHP分页函数代码(简单实用型)
Dec 02 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
Nov 01 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
Jun 13 PHP
PHP判断JSON对象是否存在的方法(推荐)
Jul 06 PHP
yii2缓存Caching基本用法示例
Jul 18 PHP
PHP简单实现上一页下一页功能示例
Sep 14 PHP
关于php中的json_encode()和json_decode()函数的一些说明
Nov 20 PHP
PHP读取Excel类文件
May 15 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
Nov 06 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
Jun 14 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
Oct 16 PHP
Linux系统中为php添加pcntl扩展
Aug 28 #PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 #PHP
PHP编写简单的App接口
Aug 28 #PHP
PHP导出带样式的Excel示例代码
Aug 28 #PHP
总结对比php中的多种序列化
Aug 28 #PHP
PHP打印输出函数汇总
Aug 28 #PHP
PHP中include/require/include_once/require_once使用心得
Aug 28 #PHP
You might like
PHP面向对象概念
2011/11/06 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
自己写的php curl库实现整站克隆功能
2015/02/12 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
深入浅出php socket编程
2015/05/13 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
Yii基于CActiveForm的Ajax数据验证用法示例
2016/07/14 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
提高Web性能的前端优化技巧总结
2017/02/27 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
JS中的多态实例详解
2017/10/15 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
ES6实现图片切换特效代码
2020/01/14 Javascript
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
美国零售商店:Blue&Cream
2017/04/07 全球购物
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
作风年建设汇报材料
2014/08/14 职场文书
英语邀请函范文
2015/02/02 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
总结Python变量的相关知识
2021/06/28 Python