文档章节

php CI 下导出EXcel

Cbping
 Cbping
发布于 2015/08/13 21:57
字数 643
阅读 78
收藏 2

一、下载

phpexcel:http://phpexcel.codeplex.com/

二、

  把classes下的文件copy到ci框架下的application/libraries目录下。

 可以先看看example目录的例子。

三、简单的封装

    放在application/libraries目录下

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');

/** Include PHPExcel */
require_once dirname(__FILE__) . '/PHPExcel.php';

/**
 * Class TableExport
 */
class TableExport
{

    /** @var  PHPExcel */
    private $_PHPExcel;

    /**
     *
     * @param PHPExcel $arg_phpExcel
     */
    public function __construct($arg_phpExcel = null)
    {
        if (is_null($arg_phpExcel) || !($arg_phpExcel instanceof PHPExcel))
            $this->_PHPExcel = new PHPExcel();
        else
            $this->_PHPExcel = $arg_phpExcel;
    }

    /**
     *
     * @return PHPExcel_DocumentProperties
     */
    public function getProperties()
    {
        return $this->_PHPExcel->getProperties();
    }

    /**
     * 编写内容
     * @notice 严格注意传入的数组格式.这里会自动忽略一些异常的行数据的
     * @param array $arg_title 一维数组 表格列名标题
     * @param array $arg_comment 二维数组
     * @todo:未中文编码处理
     * @throws PHPExcel_Exception
     * @return $this
     */
    public function setComment(array $arg_title, array $arg_comment)
    {
        static $AChar = 65;
        $column = 0;
        if (empty($arg_title) || !is_array($arg_title) || !is_array($arg_comment)) {
            throw new PHPExcel_Exception("TableExport::setComment arg_title is empty or the args not is array");
        }
        $column_count = count($arg_title);
        $this->_PHPExcel->setActiveSheetIndex(0);

        //设置列名
        foreach ($arg_title as $val) {
            $this->_PHPExcel->getActiveSheet()->getStyle(chr($AChar + $column) . '1')->getFont()->setName('Candara');
            $this->_PHPExcel->getActiveSheet()->getStyle(chr($AChar + $column) . '1')->getFont()->setSize(16);
            $this->_PHPExcel->getActiveSheet()->getStyle(chr($AChar + $column) . '1')->getFont()->setBold(true);
            $this->_PHPExcel->getActiveSheet()->getColumnDimension(chr($AChar + $column))->setWidth(21);
            $this->_PHPExcel->getActiveSheet()->setCellValue(chr($AChar + $column) . '1', $val);
            $column++;
        }
        //填写内容
        $column = 0; //列
        $row = 2;    //行
        foreach ($arg_comment as $rows) {
            //如果行内容异常,则忽略本行
            if (!is_array($rows) || count($rows) != $column_count)
                continue;
            $column = 0; //列
            foreach ($rows as $val) {
                $this->_PHPExcel->getActiveSheet()->setCellValue(chr($AChar + $column) . $row, $val);
                $column++;
            }
            $row++;
        }

        $this->_PHPExcel->setActiveSheetIndex(0);
        return $this;
    }

    /**
     * 输出内容到网页,提供下载
     *
     * @param string $arg_filename 下载文件名
     */
    public function outputDownload_Excel5($arg_filename)
    {
        // 重定向输出到浏览器客户端 (Excel5)
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="' . $arg_filename . '"');
        header('Cache-Control: max-age=0');
        //  IE 9下的头部信息
        header('Cache-Control: max-age=1');
       // IE  SSL
        header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
        header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 
        header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
        header('Pragma: public'); // HTTP/1.0

        $objWriter = PHPExcel_IOFactory::createWriter($this->_PHPExcel, 'Excel5');
        $objWriter->save('php://output');
    }

    public function convertUTF8($str)
    {
        if (empty($str)) return '';
        return iconv('gb2312', 'utf-8', $str);
    }

    /**
     * 魔术方法__call
     *
     * @param $method
     * @param $args
     * @return mixed|void
     */
    public function __call($method, $args)
    {
        //调用PHPExcel自己的方法
        if (method_exists($this->_PHPExcel, $method)) {
            return call_user_func_array(array($this->_PHPExcel, $method), $args);
        } else {
            //TODO:异常处理
            return false;
        }
    }

}

 

上面主要有两个方法,

setComment()输入excel内容,首先是列名,占据了第一行位置(A1,B1,C1....),然后真正的数据从第二行开始。
outputDownload_Excel5()输出Excel5格式的文件流到浏览器

 

   其他方法都全部委托到原本的PHPExcel中去。

然后在控制器下调用

$this->load->library('TableExport');
$this->tableexport->getProperties()->setTitle("xxxx")->setSubject("xxxx");
$this->tableexport->getDefaultStyle()->getFont()->setSize(13);
$this->tableexport->setComment($column, $rows)->outputDownload_Excel5("xxx.xls");

 

然后浏览器下会提示查看或者保存的(谷歌下直接下载了)。

四、结束语

 望指正!

© 著作权归作者所有

Cbping
粉丝 3
博文 11
码字总数 5190
作品 0
广州
后端工程师
私信 提问
CI 3X 使用xlsxwriter.class.php导出数据到Excel文件

CI 3.1.9 使用xlsxwriter.class.php导出数据到Excel文件 使用PHPExcel类库导出数据库数据,当数据大于50000条记录时,导出效率较低。网上github有xlsxwriter.class.php类,能较好解决此问题。...

康师傅
07/08
14
2
Codeigniter利用PHPExcel导出Excel文件

在php中我们如果要导入excel文件我们会直接使用php输出csv文件或者使用phpexcel直接生成excel文件,下面我再来介绍Codeigniter利用PHPExcel导出Excel文件具体实现方法,有需要学习的朋友可参...

mickelfeng
2013/05/05
3K
1
Codeigniter(CI)结合PHPExcel类完成数据导入

安装PHPExcel到Codeigniter 1) 解压压缩包里的Classes文件夹中的内容到applicationlibraries目录下,目录结构如下: – applicationlibrariesPHPExcel.php – applicationlibrariesPHPExcel...

Louis_88
2016/03/24
586
0
php导入导出excel实例

这里实现的PHP导入导出excel功能用到的是开源PHPExcel,执行下面的操作之前请先下载该类库文件,官方网站:http://www.codeplex.com/PHPExcel,官网案例代码很多,导出pdf什么的都有,这里主...

card123
2015/09/24
441
0
PHP导入Excel和导出数据为Excel文件

有时需要将Excel表格的数据导入到mysql数据库中,我们使用PHP的一个开源项目PHP-ExcelReader可以轻松实现Excel的导入。另外将mysql数据导出为Excel与本站上篇文章中导出CSV一样,只是将逗号分...

rin9958
2016/06/03
119
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
12
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
22
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
17
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
29
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部