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执行速度全攻略(下)
Oct 09 PHP
用来给图片加水印的PHP类
Apr 09 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
May 07 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
PHP数组排序函数合集 以及它们之间的联系分析
Jun 27 PHP
PHP删除HTMl标签的实现代码
Jun 30 PHP
windows7下php开发环境搭建图文教程
Jan 06 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
WordPress后台中实现图片上传功能的实例讲解
Jan 11 PHP
PHP编程获取各个时间段具体时间的方法
May 26 PHP
在laravel5.2中实现点击用户头像更改头像的方法
Oct 14 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 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
YII框架http缓存操作示例
2019/04/29 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
PHP中CURL的几个经典应用实例
2015/01/23 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
ajax接收后台数据在html页面显示
2017/02/19 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
2018/07/26 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
Python文件与文件夹常见基本操作总结
2016/09/19 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
TensorFlow实现模型评估
2018/09/07 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
python手写均值滤波
2020/02/19 Python
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
个人近期表现材料
2014/02/11 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
会议开幕词
2015/01/28 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server