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 file_exists 检查文件或目录是否存在的函数
May 10 PHP
php分页思路以及在ZF中的使用
May 30 PHP
PHP跨时区(UTC时间)应用解决方案
Jan 11 PHP
关于PHP递归算法和应用方法介绍
Apr 15 PHP
解析关于wamp启动是80端口被占用的问题
Jun 21 PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 PHP
WordPress中查询文章的循环Loop结构及用法分析
Dec 17 PHP
PHP QRCODE生成彩色二维码的方法
May 19 PHP
Laravel重写用户登录简单示例
Oct 08 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 PHP
php定期拉取数据对比方法实例
Sep 22 PHP
Thinkphp 框架扩展之驱动扩展实例分析
Apr 27 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
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
2016/05/04 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
AngularJS实现进度条功能示例
2017/07/05 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
python版本的读写锁操作方法
2016/04/25 Python
Python3数据库操作包pymysql的操作方法
2018/07/16 Python
Python数据分析matplotlib设置多个子图的间距方法
2018/08/03 Python
使用python画社交网络图实例代码
2019/07/10 Python
Django模板语言 Tags使用详解
2019/09/09 Python
使用python3批量下载rbsp数据的示例代码
2019/12/20 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
八皇后问题,输出了所有情况,不过有些结果只是旋转了90度
2016/08/15 面试题
银行类自荐信
2014/02/04 职场文书
创业资金计划书
2014/02/06 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
政府会议通知范文
2015/04/15 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
走进毛泽东观后感
2015/06/04 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python
浅谈MySQL 亿级数据分页的优化
2021/06/15 MySQL