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的更多相关文章

  1. thinkPHP中phpexcel的导出功能

    public function wExcel() { vendor("PHPExcel.PHPExcel"); // Create new PHPExcel object $obj ...

  2. PHPexcel数据导出

    使用PHPexcel数据导出,可以从网上下载phpexcel引入使用,下面是我做的简单的数据导出练习 一.下载phpexcel 二.引发这个导出(我这里是写了一个简单的点击事件) <div id ...

  3. ThinkPHP5使用PHPExcel实现数据导出功能

    1.将PHPExcel类库文件夹放入extend目录下 2.导出功能实现 public function download(){ if(request()->isPost()){ $val = ...

  4. PHPExcel导出数据时字段超过26列出错Invalid cell coordinate [1

    http://blog.csdn.net/dl425134845/article/details/46650961 以下是解决方案函数 /** *   方法名:    getExcel *   作用  ...

  5. jxl写入excel实现数据导出功能

    @RequestMapping(params = "method=export", method = RequestMethod.GET) public void exportCo ...

  6. Excel数据导出功能

    HTML代码: <a id="aExportData" hidden><span>Export</span></a> <div ...

  7. phpexcel: 数据导出

    // 设置列名最多40个 $cols = array( "A", "B", "C", "D", "E" ...

  8. nginx 代理请求导出功能bug解决方法

    问题描述: nginx代理的ip直接访问可以直接下载文件,但是通过nginx访问就报502,nginx错误日志:upstream sent invalid chunked response while ...

  9. 封装Excls数据导出功能 返回一个下载链接地址

    /// <summary> /// 获取本地存储地址 /// </summary> /// <param name="dt"></para ...

随机推荐

  1. Redhat 安装ftp服务

    介绍: 1 安装ftp服务端及客户端 2 ftp的使用

  2. MongoDB副本集的常用操作及原理

    本文是对MongoDB副本集常用操作的一个汇总,同时也穿插着介绍了操作背后的原理及注意点. 结合之前的文章:MongoDB副本集的搭建,大家可以在较短的时间内熟悉MongoDB的搭建和管理. 下面的操 ...

  3. 计算进程消费cpu和内存

    Linux下没有直接可以调用系统函数知道CPU占用和内存占用.那么如何知道CPU和内存信息呢.只有通过proc伪文件系统来实现. proc伪文件就不介绍了,只说其中4个文件.一个是/proc/stat ...

  4. [笔记]机器学习(Machine Learning) - 01.线性回归(Linear Regression)

    线性回归属于回归问题.对于回归问题,解决流程为: 给定数据集中每个样本及其正确答案,选择一个模型函数h(hypothesis,假设),并为h找到适应数据的(未必是全局)最优解,即找出最优解下的h的参数 ...

  5. UDP协议详解

    1.UDP协议的作用 IP协议无法区别同一个主机系统上的多个应用程序.UDP采用端口标识同一主机上的不同应用程序. 无法采取进程ID来标识不同应用程序的原因: 1)系统中应用程序的进程ID分配和销毁是 ...

  6. 简易RPC框架-学习使用

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  7. AngularJS操作DOM——angular.element

    addClass()-为每个匹配的元素添加指定的样式类名 after()-在匹配元素集合中的每个元素后面插入参数所指定的内容,作为其兄弟节点 append()-在每个匹配元素里面的末尾处插入参数内容a ...

  8. 019 关联映射文件中集合标签中的lazy(懒加载)属性

    <set>.<list>集合上,可以取值:true/false/extra,(默认值为:true) 实例一:(集合上的lazy=true(默认))class默认lazy=tru ...

  9. 《一起》Alpha版软件使用说明

    1.引言 1.1编写目的 本手册是软件工程概论团队项目<一起>的Alpha版使用说明,面向的对象群体为全校师生. 1.2项目背景 本项目由<软件工程概论>课程需求创建,软件由S ...

  10. JDFS:一款分布式文件管理实用程序第二篇(更新升级、解决一些bug)

    一 前言 本文是<JDFS:一款分布式文件管理实用程序>系列博客的第二篇,在上一篇博客中,笔者向读者展示了JDFS的核心功能部分,包括:服务端与客户端部分的上传.下载功能的实现,epoll ...