ThinkPHP 整合 PHPExcel ,数据导出功能实现,解决Invalid cell coordinate
PHPExcel想必大家都不陌生,是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格
本次只做数据导出功能的实现,而且我也只做了数据导出(  ̄ー ̄)!
废话少说
1. 导入类库
首先需要下载类库,官方网站:http://phpexcel.codeplex.com/
将下载下来的包解压:PHPExcel_1.8.0_doc.zip\Classes下面的文件就是我们需要的
ThinkPHP第三方类需要放在/ThinkPHP/Library/Vendor下面,新建一个文件夹PHPExcel,将需要的类放进去
2. 工具类
我在Application目录下新建个模块Lib,用于存放公共的工具类
新建文件 ExcelOperation.class.php
代码如下:有需要的可以自己扩展
17.04.22-更新:解决表头超过26列报错:Invalid cell coordinate
这种错误主要是表头AA,AB,AC...,ord()转换问题
<?php
/**
* PHPExcel
* Created by dbn
* Date: 2016/12/15
*/
namespace Lib;
class ExcelOperation
{
public function __construct()
{
vendor('PHPExcel.PHPExcel');
vendor('PHPExcel.PHPExcel.IOFactory');
vendor('PHPExcel.PHPExcel.Writer.Excel5');
vendor('PHPExcel.PHPExcel.Writer.Excel2007');
}
/**
* 数据导出
* @param string $fileName 文件名
* @param array $headArr 表头数据(一维)
* @param array $data 列表数据(二维)
* @param int $width 列宽
* @return bool
*/
public function push($fileName="", $headArr=array(), $data=array(), $width=20)
{
if (empty($headArr) && !is_array($headArr) && empty($data) && !is_array($data)) {
return false;
}
$date = date("YmdHis",time());
$fileName .= "_{$date}.xls";
$objPHPExcel = new \PHPExcel();
//设置表头
$tem_key = "A";
foreach($headArr as $v){
if (strlen($tem_key) > 1) {
$arr_key = str_split($tem_key);
$colum = '';
foreach ($arr_key as $ke=>$va) {
$colum .= chr(ord($va));
}
} else {
$key = ord($tem_key);
$colum = chr($key);
}
$objPHPExcel->getActiveSheet()->getColumnDimension($colum)->setWidth($width); // 列宽
$objPHPExcel->getActiveSheet()->getStyle($colum)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // 垂直居中
$objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFont()->setBold(true); // 字体加粗
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
$tem_key++;
}
$objActSheet = $objPHPExcel->getActiveSheet();
$border_end = 'A1'; // 边框结束位置初始化
// 写入内容
$column = 2;
foreach($data as $key => $rows){ //获取一行数据
$tem_span = "A";
foreach($rows as $keyName=>$value){// 写入一行数据
if (strlen($tem_span) > 1) {
$arr_span = str_split($tem_span);
$j = '';
foreach ($arr_span as $ke=>$va) {
$j .= chr(ord($va));
}
} else {
$span = ord($tem_span);
$j = chr($span);
}
$objActSheet->setCellValue($j.$column, $value);
$border_end = $j.$column;
$tem_span++;
}
$column++;
}
$objActSheet->getStyle("A1:".$border_end)->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN); // 设置边框
$fileName = iconv("utf-8", "gb2312", $fileName);
//重命名表
//$objPHPExcel->getActiveSheet()->setTitle('test');
//设置活动单指数到第一个表
$objPHPExcel->setActiveSheetIndex(0);
ob_end_clean();//清除缓冲区,避免乱码
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=\"$fileName\"");
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output'); //文件通过浏览器下载
exit;
}
}
PHPExcel在绘制样式时会做大量的时间,当数据量过大时,大家要有个取舍!
注:表头和内容顺序一定要对应上
ThinkPHP 整合 PHPExcel ,数据导出功能实现,解决Invalid cell coordinate的更多相关文章
- thinkPHP中phpexcel的导出功能
public function wExcel() { vendor("PHPExcel.PHPExcel"); // Create new PHPExcel object $obj ...
- PHPexcel数据导出
使用PHPexcel数据导出,可以从网上下载phpexcel引入使用,下面是我做的简单的数据导出练习 一.下载phpexcel 二.引发这个导出(我这里是写了一个简单的点击事件) <div id ...
- ThinkPHP5使用PHPExcel实现数据导出功能
1.将PHPExcel类库文件夹放入extend目录下 2.导出功能实现 public function download(){ if(request()->isPost()){ $val = ...
- PHPExcel导出数据时字段超过26列出错Invalid cell coordinate [1
http://blog.csdn.net/dl425134845/article/details/46650961 以下是解决方案函数 /** * 方法名: getExcel * 作用 ...
- jxl写入excel实现数据导出功能
@RequestMapping(params = "method=export", method = RequestMethod.GET) public void exportCo ...
- Excel数据导出功能
HTML代码: <a id="aExportData" hidden><span>Export</span></a> <div ...
- phpexcel: 数据导出
// 设置列名最多40个 $cols = array( "A", "B", "C", "D", "E" ...
- nginx 代理请求导出功能bug解决方法
问题描述: nginx代理的ip直接访问可以直接下载文件,但是通过nginx访问就报502,nginx错误日志:upstream sent invalid chunked response while ...
- 封装Excls数据导出功能 返回一个下载链接地址
/// <summary> /// 获取本地存储地址 /// </summary> /// <param name="dt"></para ...
随机推荐
- crontab的两种配置方式
废话不多说,直接上菜了 第一种:在/etc/crontab下设置,指定用户名的 1.vim命令进入/etc/crontab 2.在最后一行加上 59 23 * * * root /root/cat ...
- ArcGIS 网络分析[2] 利用自定义基础数据创建网络数据集
前言 似乎除了官方介绍的例子,我还没有在网上见过一篇介绍如何"使用自己的数据"创建"网络数据集"的文章. 有介绍几何网络的,有介绍如何用官方SanFrancis ...
- zabbix安装配置
实验环境 主机名 操作系统版本 IP地址 安装软件 console CentOS 7.0 114.55.29.246 Httpd.Nginx.MySQL.Zabbix log1 CentOS 7.0 ...
- Arcengine 二次开发添加右键菜单
最近在搞arcengine 二次开发,遇到了好多问题,也通过网上查资料试着慢慢解决了,把解决的步骤记录下来,有需要帮助的可以看一下,也欢迎各位来批评指正. 想给自己的map application在图 ...
- KafKa介绍(分布式架构)
介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: Kafka将消息以to ...
- VR全景是继互联网后的第二王朝吗?
VR虚拟现实.VR全景广泛用于游戏中,带上VR眼镜,有身临其境般的感觉.于是近些年围绕着 "下一代计算平台",国内外兴起一股虚拟现实热,在这样的形势下,VR眼镜在国内打的十分火热. ...
- 搭建腾讯云Linux服务器(Centos6)入门教程
搭建腾讯云我们需要准备WinSCP,支持文件上传和下载的客户端,界面操作,很方便快捷,有这个可以不用搭建SVN哦! SecureCRT 7.3,这个是很不错的Linux远程客户端哦,可以去CSDN下载 ...
- My-Blog搭建过程:如何让一个网站从零到可以上线访问
文章简述 5月13号的时候,上线了自己的个人博客网站:http://blog.hanshuai.xin,随后在平台上发布了一篇关于My-Blog的介绍博客<Docker+SpringBoot+M ...
- OpenCV探索之路(十一):轮廓查找和多边形包围轮廓
Canny一类的边缘检测算法可以根据像素之间的差异,检测出轮廓边界的像素,但它没有将轮廓作为一个整体.所以要将轮廓提起出来,就必须将这些边缘像素组装成轮廓. OpenCV中有一个很强大的函数,它可以从 ...
- linux通配符与正则表达式
通配符 * 任意字符,可重复多次 ? 任意字符,重复一次 [] 代表一个字符 举例: [a,b,c] 表示abc中任意一个 通配符的作用是用来匹配文件名的 正则表达式 正则表达式 ...