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中设置时区方法小结
Jun 03 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
Jul 31 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
Oct 25 PHP
php实现的CSS更新类实例
Sep 22 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
Dec 05 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
Jun 23 PHP
php生成curl命令行的方法
Dec 14 PHP
PHP实现补齐关闭的HTML标签
Mar 22 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
Apr 20 PHP
学习PHP的数组总结【经验】
May 05 PHP
php反射类ReflectionClass用法分析
May 12 PHP
PHP 二级子目录(后台目录)设置二级域名
Mar 02 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
改进的IP计数器
2006/10/09 PHP
php批量更改数据库表前缀实现方法
2013/10/26 PHP
php删除文本文件中重复行的方法
2015/04/28 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
JS实现无缝循环marquee滚动效果
2017/05/22 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
React 组件间的通信示例
2018/06/14 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
python避免死锁方法实例分析
2015/06/04 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
公司前台辞职报告
2014/01/19 职场文书
双方协议书
2014/04/22 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
公司节能减排方案
2014/05/16 职场文书
拉拉队口号
2014/06/16 职场文书
个人股份转让协议书范本
2014/10/26 职场文书
离婚案件被告代理词
2015/05/23 职场文书
家长通知书家长意见
2015/06/03 职场文书
歌剧魅影观后感
2015/06/05 职场文书