分享

excel数据的导出

 小马哥技术屋 2016-10-02
今天给大家介绍一个新的简单的方法:
首先将excel_xml.class.php放入到think目录下,
下面是excel_xml.class.php

<?php
namespace Think;
class Excel_XML{
    private $header = "<?xml version=\"1.0\" encoding=\"%s\"?\>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:html=\"http://www./TR/REC-html40\">";
    private $footer = "</Workbook>";
    private $lines = array();
    private $sEncoding;
    private $bConvertTypes;
    private $sWorksheetTitle;
    public function __construct($sEncoding = 'UTF-8', $bConvertTypes = false, $sWorksheetTitle = 'Table1'){
        $this->bConvertTypes = $bConvertTypes;
        $this->setEncoding($sEncoding);
        $this->setWorksheetTitle($sWorksheetTitle);
    }

    public function setEncoding($sEncoding){
        $this->sEncoding = $sEncoding;
    }
    public function setWorksheetTitle ($title){
        $title = preg_replace ("/[\\\|:|\/|\?|\*|\[|\]]/", "", $title);
        $title = substr ($title, 0, 31);
        $this->sWorksheetTitle = $title;
    }
    private function addRow ($array){
        $cells = "";
        foreach ($array as $k => $v):
            $type = 'String';
            if ($this->bConvertTypes === true && is_numeric($v)):
                    $type = 'Number';
            endif;
            $v = htmlentities($v, ENT_COMPAT, $this->sEncoding);
            $cells .= "<Cell><Data ss:Type=\"$type\">" . $v . "</Data></Cell>\n";
        endforeach;
        $this->lines[] = "<Row>\n" . $cells . "</Row>\n";
    }
   
    public function addArray ($array){
        foreach ($array as $k => $v)
           $this->addRow ($v);
    }
    public function generateXML ($filename = 'excel-export'){
        // correct/validate filename
        $filename = preg_replace('/[^aA-zZ0-9\_\-]/', '', $filename);

        // deliver header (as recommended in php manual)
        header("Content-Type: application/vnd.ms-excel; charset=" . $this->sEncoding);
        header("Content-Disposition: attachment; filename=\"" . $filename . ".xls\""); //作为附件方式
        //header("Content-Disposition: inline; filename=\"" . $filename . ".xls\"");//在线打开方式

        // print out document to the browser
        // need to use stripslashes for the damn ">"
        echo stripslashes (sprintf($this->header, $this->sEncoding));
        echo "\n<Worksheet ss:Name=\"" . $this->sWorksheetTitle . "\">\n<Table>\n";
        foreach ($this->lines as $line)
                echo $line;

        echo "</Table>\n</Worksheet>\n";
        echo $this->footer;
    }
}

?>

2、引入excel_cml类
use Think\Excel_XML;
在控制器的方法里写
public function exexcel(){
        vendor("Excel_XML");
        $xls = new Excel_XML('UTF-8', false, 'My Test Sheet');
        $powerinfo = D('Power')->order('power_path')->select();
     
//$data 是为excel放入头部信息
        $data = array(
          1 => '编号',
          2 => '权限名称',
          3 => '父id',
          4 => '控制器',
          5 =>  '操作方法',
          6 => '全路径' ,
          7 => '等级'
        );
//将$data 插入到数据信息的开头
        array_unshift($powerinfo, $data);//向数组插入元素
        $xls->addArray($powerinfo);
        $xls->generateXML('my-test');//导出excel的文件名
    }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约