php CI 下導出EXcel

1、下載php

phpexcel:http://phpexcel.codeplex.com/數組

2、瀏覽器

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

 能夠先看看example目錄的例子。框架

3、簡單的封裝ui

    放在application/libraries目錄下this

<?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中去。excel

而後在控制器下調用code

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

 

而後瀏覽器下會提示查看或者保存的(谷歌下直接下載了)。

4、結束語

 望指正!

相關文章
相關標籤/搜索