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 ...
随机推荐
- Redhat 安装ftp服务
介绍: 1 安装ftp服务端及客户端 2 ftp的使用
- MongoDB副本集的常用操作及原理
本文是对MongoDB副本集常用操作的一个汇总,同时也穿插着介绍了操作背后的原理及注意点. 结合之前的文章:MongoDB副本集的搭建,大家可以在较短的时间内熟悉MongoDB的搭建和管理. 下面的操 ...
- 计算进程消费cpu和内存
Linux下没有直接可以调用系统函数知道CPU占用和内存占用.那么如何知道CPU和内存信息呢.只有通过proc伪文件系统来实现. proc伪文件就不介绍了,只说其中4个文件.一个是/proc/stat ...
- [笔记]机器学习(Machine Learning) - 01.线性回归(Linear Regression)
线性回归属于回归问题.对于回归问题,解决流程为: 给定数据集中每个样本及其正确答案,选择一个模型函数h(hypothesis,假设),并为h找到适应数据的(未必是全局)最优解,即找出最优解下的h的参数 ...
- UDP协议详解
1.UDP协议的作用 IP协议无法区别同一个主机系统上的多个应用程序.UDP采用端口标识同一主机上的不同应用程序. 无法采取进程ID来标识不同应用程序的原因: 1)系统中应用程序的进程ID分配和销毁是 ...
- 简易RPC框架-学习使用
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- AngularJS操作DOM——angular.element
addClass()-为每个匹配的元素添加指定的样式类名 after()-在匹配元素集合中的每个元素后面插入参数所指定的内容,作为其兄弟节点 append()-在每个匹配元素里面的末尾处插入参数内容a ...
- 019 关联映射文件中集合标签中的lazy(懒加载)属性
<set>.<list>集合上,可以取值:true/false/extra,(默认值为:true) 实例一:(集合上的lazy=true(默认))class默认lazy=tru ...
- 《一起》Alpha版软件使用说明
1.引言 1.1编写目的 本手册是软件工程概论团队项目<一起>的Alpha版使用说明,面向的对象群体为全校师生. 1.2项目背景 本项目由<软件工程概论>课程需求创建,软件由S ...
- JDFS:一款分布式文件管理实用程序第二篇(更新升级、解决一些bug)
一 前言 本文是<JDFS:一款分布式文件管理实用程序>系列博客的第二篇,在上一篇博客中,笔者向读者展示了JDFS的核心功能部分,包括:服务端与客户端部分的上传.下载功能的实现,epoll ...