php CI 下导出EXcel

一、下载

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");

 

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

四、结束语

 望指正!

转载于:https://my.oschina.net/u/1167564/blog/492055

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值