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 相关文章推荐
php4的session功能评述(三)
Oct 09 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
轻松修复Discuz!数据库
May 03 PHP
php 采集书并合成txt格式的实现代码
Mar 01 PHP
php xml实例 留言本
Mar 20 PHP
深入Apache与Nginx的优缺点比较详解
Jun 17 PHP
php文件上传的简单实例
Oct 19 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
Oct 25 PHP
php+html5实现无刷新图片上传教程
Jan 22 PHP
php数组冒泡排序算法实例
May 06 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 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上传、管理照片示例
2006/10/09 PHP
PHP开发需要注意的安全问题
2010/09/01 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
PHP发送AT指令实例代码
2016/05/26 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
2017/02/05 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
JavaScript函数详解
2015/02/27 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
js的三种继承方式详解
2017/01/21 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
Python中字符串的常见操作技巧总结
2016/07/28 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
python多线程与多进程及其区别详解
2019/08/08 Python
python安装virtualenv虚拟环境步骤图文详解
2019/09/18 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
送给程序员的20个Java集合面试问题
2014/08/06 面试题
自我鉴定写作要点
2014/01/17 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
一体化教学实施方案
2014/05/10 职场文书
竞选班干部演讲稿300字
2014/08/20 职场文书
青年文明号汇报材料
2014/12/23 职场文书
出纳工作检讨书范文
2014/12/27 职场文书
会计求职信怎么写
2015/03/20 职场文书
环保证明
2015/06/23 职场文书
运动会班级前导词
2015/07/20 职场文书