注册加入 登录
Discuz!扩展中心 返回首页

湖中沉的个人空间 https://www.kuozhan.net/?1 [收藏] [复制] [分享] [RSS]

日志

分享一个利用php输出excel文件的类 用于报表操作很方便

已有 7465 次阅读2013-6-11 06:54 |个人分类:PHP| excel

这短时间操作数据比较频繁,每次都是写到csv文件中。久而久之发现一个问题,在服务器上产生了N多的垃圾文件,在考虑怎么能输出一种利于业务人员查看的报表而且还不给服务器产生垃圾文件的办法。尝试写了一个excel的累(最简单的有需求可以自己增加)。代码如下

/**
 * 导出到excel文件
 * @author rookie <wanggeng123@vip.qq.com>
 * @authorLink www.xiaocainiao.net
 */
class Excel{
    /**
     * 头部 
     */
    private $head;
    /**
     * 内容体 
     */
    private $body;
    
    /**
     * 设置头部
     * @param array $arr 一维索引数组
     * @author rookie Wanggeng123@vip.qq.com
     * @authorlink www.xiaocainiao.net    
     */
    public function addHeader($arr){
        foreach($arr as $headVal){
            $headVal = $this->charset($headVal);
            $this->head .= "{$headVal}\t ";
        }
        $this->head .= "\n";
    }
    
    /**
     * 设置内容
     * @param array $arr 二维索引数组
     * @author rookie Wanggeng123@vip.qq.com
     * @authorlink www.xiaocainiao.net    
     */
    public function addBody($arr){
        foreach($arr as $arrBody){
            foreach($arrBody as $bodyVal){
                $bodyVal = $this->charset($bodyVal);
                $this->body .= "{$bodyVal}\t ";
            }
            $this->body .= "\n";
        }
    }
    
    /**
     * 下载excel文件
     */
    public function downLoad($filename=''){
        if(empty($filename)){
            $filename = date('YmdHis',time()).'.xls';
        } else {
            $filename = $filename. '.xls';
        }
        header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
        header('Cache-Control: no-cache, must-revalidate');
        header('Pragma: no-cache');
        header('Content-Type: charset=gbk');
        header('Expires: 0');
        header('Content-type:application/vnd.ms-excel; charset=gbk');
        header("Content-Disposition:attachment; filename=$filename");
        $body = '';
        if($this->head){
            $body .= $this->head;
        }
        $body .= $this->body;
        echo $body;
    }
    
    /**
     * 编码转换 (由于win下一般是gbk的所以转下码)
     * @param type $string
     * @return string
     */
    public function charset($string){
        return iconv("utf-8", "gbk", $string);
    }
}



接下来是简单的应用


$excel = new Excel();
$head = array('姓名','性别','班级','年龄');
$body = array(
        array('张三','男','1','12'),
        array('李四','女','2','12'),
        array('王五','男','3','12'),
        array('赵六','女','4','12'),
        array('王五','男','5','12'),
        array('李四','女','6','12'),
        array('哈哈','男','7','12')
    );
$excel->addHeader($head);
$excel->addBody($body);
$excel->downLoad('班级信息');

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册加入

Archiver|手机版|小黑屋|Discuz!扩展中心 ( 浙ICP备14042422号-1 )|网站地图QQ机器人

GMT+8, 2024-3-29 06:48 , Processed in 0.450580 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部