成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ThinkPHP用PHPExcle導(dǎo)出Excel文件

rollback / 1268人閱讀

摘要:本篇文章主要講述,如何在中使用中導(dǎo)出文件,是博主在實(shí)踐了好多篇?jiǎng)e人的帖子之后,總結(jié)歸納出來(lái)的文章,親測(cè)可用。我的博客歡迎騷擾原文地址用導(dǎo)出文件。將文件,重命名成。文章結(jié)束,歡迎轉(zhuǎn)載。

本篇文章主要講述,如何在thinkPHP中使用PHPExcel中導(dǎo)出Excel文件,是博主在實(shí)踐了好多篇?jiǎng)e人的帖子之后,總結(jié)歸納出來(lái)的文章,親測(cè)可用。thinkPHP版本是3.2。

我的博客:Mine-MuYan,歡迎騷擾,原文地址:ThinkPHP用PHPExcle導(dǎo)出Excel文件。

準(zhǔn)備工作 下載、配置PHPExcel擴(kuò)展插件

去PHPExcel的官網(wǎng)或者github去下載最新PHPExcel放到ThinkPHP/Library/Vendor目錄下,Vendor目錄是放置PHP擴(kuò)展包的默認(rèn)文件夾,在Vendor目錄下建立PHPExcel文件夾,將下載的文件,解壓到此處。

PHPExcel.php文件,重命名成PHPExcel.class.php。

至此,插件安裝已經(jīng)做好,目錄結(jié)構(gòu)如下圖,接下來(lái)做功能部分。

創(chuàng)建Excel方法 生成Excel文件方法
/**
     * 數(shù)據(jù)導(dǎo)出為.xls格式
     * @param string $fileName 導(dǎo)出的文件名
     * @param $expCellName     array -> 數(shù)據(jù)庫(kù)字段以及字段的注釋
     * @param $expTableData    Model -> 連接的數(shù)據(jù)庫(kù)
     */
    public function exportExcel($fileName="table",$expCellName,$expTableData){
        $xlsTitle = iconv("utf-8", "gb2312", $fileName);//文件名稱
        $xlsName = $fileName.date("_Y.m.d_H.i.s"); //or $xlsTitle 文件名稱可根據(jù)自己情況設(shè)定
        $cellNum = count($expCellName);
        $dataNum = count($expTableData);

        import("Vendor.PHPExcel.PHPExcel");
        import("Vendor.PHPExcel.Writer.Excel5");
        import("Vendor.PHPExcel.IOFactory.php");

        $objPHPExcel = new PHPExcel();
        $cellName = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM","AN","AO","AP","AQ","AR","AS","AT","AU","AV","AW","AX","AY","AZ");

        $objPHPExcel->getActiveSheet(0)->mergeCells("A1:".$cellName[$cellNum-1]."1");//合并單元格
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue("A1", $fileName."  Export time:".date("Y-m-d H:i:s"));
        for($i=0;$i<$cellNum;$i++){
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i]."2", $expCellName[$i][1]);
        }
        // Miscellaneous glyphs, UTF-8
        for($i=0;$i<$dataNum;$i++){
            for($j=0;$j<$cellNum;$j++){
                $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3), $expTableData[$i][$expCellName[$j][0]]);
            }
        }

        header("pragma:public");
        header("Content-type:application/vnd.ms-excel;charset=utf-8;name="".$xlsTitle.".xls"");
        header("Content-Disposition:attachment;filename=$xlsName.xls");//attachment新窗口打印inline本窗口打印
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel5");
        $objWriter->save("php://output");
        exit;
    }
方法生成說(shuō)明 第9行的

$xlsName = $fileName.date("_Y.m.d_H.i.s"); //or $xlsTitle 文件名稱可根據(jù)自己情況設(shè)定

是設(shè)置文件名,上面所寫是文件名_Y.m.d_H.i.s,_Y.m.d_H.i.s即是導(dǎo)出的時(shí)間,因?yàn)閣indows下,文件名中不能含有:,所以即便寫成_Y.m.d_H:i:s,導(dǎo)出的文件也是_Y.m.d_H.i.s這種樣式。

第13行~15行的
import("Vendor.PHPExcel.PHPExcel");
import("Vendor.PHPExcel.Writer.Excel5");
import("Vendor.PHPExcel.IOFactory.php");

這三行即是引入PHPExcel,因?yàn)楫?dāng)時(shí)的文件目錄結(jié)構(gòu)是ThinkPHP/Library/Vendor/PHPExcel,所以import("Vendor.PHPExcel.PHPExcel");,注意目錄結(jié)構(gòu),只要引入的位置和放置PHPExcel的目錄相同即可;

第20、21行的
$objPHPExcel->getActiveSheet(0)->mergeCells("A1:".$cellName[$cellNum-1]."1");//合并單元格
$objPHPExcel->setActiveSheetIndex(0)->setCellValue("A1", $fileName."  Export time:".date("Y-m-d H:i:s"));

此作用是,在Excel文件的第一行合并一行單元格,用作表格的標(biāo)題或簡(jiǎn)介。如下圖所示:

setCellValue("A1", $fileName." Export time:".date("Y-m-d H:i:s"));值可以根據(jù)自己需求修改;

第34行的

header("Content-Disposition:attachment;filename=$xlsName.xls");//attachment新窗口打印inline本窗口打印

可以設(shè)置輸出的文件格式,此處寫的是.xls,可修改成.xlsx。

三個(gè)參數(shù)

此方法調(diào)用時(shí)需要傳入三個(gè)參數(shù)(在方法開頭的注釋中已經(jīng)說(shuō)了),這里再具體說(shuō)明一下:

    $fileName     導(dǎo)出的文件的文件名
    $expCellName  數(shù)據(jù)庫(kù)字段以及字段的注釋(數(shù)組) 
    $expTableData 連接的數(shù)據(jù)庫(kù)
方法調(diào)用 調(diào)用方法
 /**導(dǎo)出**/
    public function msgOut(){
        $excel = A("Excel");
        $xlsCell = array(
            array("id", "ID"),
            array("staff_name", "昵稱"),
            array("staff_real", "真實(shí)姓名"),
            array("mobile", "手機(jī)號(hào)"),
            array("card_id", "身份證號(hào)"),
            array("referee", "推薦人"),
            array("game_id", "游戲ID"),
            array("money", "余額"),
            array("consume_coin", "消費(fèi)幣"),
            array("create_time", "注冊(cè)時(shí)間"),
            array("status", "狀態(tài)"),
        );
        $xlsName = "Staff表搜索結(jié)果導(dǎo)出";
        $field = null;
        foreach ($xlsCell as $key => $value) {
            if($key == 0){
                $field = $value[0];
            }else{
                $field .= "," . $value[0];
            }
        }
        $xlsModel = M("Staff");
        if (IS_POST) {
            $map = $this -> _queryTime();
            $staff_name = I("staff_name");
            if($staff_name) {
                if (is_numeric($staff_name)) {
                    $map["id|staff_name"] = array(intval($staff_name), array("like", "%" . $staff_name . "%"), "_multi" => true);
                } else {
                    $map["staff_name"] = array("like", "%" . (string)$staff_name . "%");
                }
            }
            $xlsData = $xlsModel->Field($field)->where($map)->order("id DESC")->select();
        }
        foreach ($xlsData as $k => $v) {
            $xlsData[$k]["create_time"] = $v["create_time"] == null ? "-" : date("Y-m-d H:i",$v["create_time"]);
            $xlsData[$k]["status"] = $v["status"] == 1 ? "正常" : "禁用";
        }
        $excel->exportExcel($xlsName,$xlsCell,$xlsData);
    }
調(diào)用說(shuō)明 第3行

$excel = A("Excel");
這個(gè)方法我寫在了Application/Admin/Controller/ExcelController.class.php中,當(dāng)前用的控制器是MainController.class.php,調(diào)用其他控制器中的方法,用TP中自帶的A(),所以第51行,用的是$excel->exportExcel($xlsName,$xlsCell,$xlsData);,如果你的exportExcel()方法和當(dāng)前調(diào)用的方法在同一個(gè)控制器內(nèi),那么第三行可以不寫,第51行改成$this->exportExcel($xlsName,$xlsCell,$xlsData);。

第4行

$xlsCell是導(dǎo)出這張表中所有的字段,以及字段的注釋,導(dǎo)出后,不能把字段作為表格的列名,不知道數(shù)據(jù)庫(kù)字段是什么意思的用戶,看了這張表也不知所以然。

第17~24行

是根據(jù)$xlsCell數(shù)組中,提取出來(lái)字段名,作為一個(gè)字符串,在查詢時(shí)使用。當(dāng)然也可以把這個(gè)字段名的字符串手寫出來(lái),我這里用的是foreach處理。

第27~38行

是查詢條件和查詢結(jié)果,如果沒有查詢條件,想把整張表導(dǎo)出的話,直接用 $xlsData = $xlsModel->Field($field)->order("id DESC")->select();即可。

第47~50行

是對(duì)$xlsData結(jié)果進(jìn)行處理,我寫的兩個(gè)意思是:

  1.當(dāng)`create_time`字段為空的時(shí)候,值為 `-` ,有值的時(shí)候,就用`date()`函數(shù)把時(shí)間戳處理成日期;
  2.當(dāng)`status`字段的值為1的時(shí)候,顯示為`正常`,當(dāng)值為0的時(shí)候`禁用`。

有點(diǎn)羅嗦了,見諒。

模板文件

模板文件很簡(jiǎn)單,就一個(gè)提交。

form表單中三個(gè)input,是搜索條件,如果沒有的話,直接寫button即可。

文章結(jié)束,歡迎轉(zhuǎn)載。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30592.html

相關(guān)文章

  • 前端實(shí)現(xiàn)Excel導(dǎo)入和導(dǎo)出功能

    摘要:介紹最近項(xiàng)目中讓實(shí)現(xiàn)一個(gè)導(dǎo)入導(dǎo)出的功能,查找了一些插件后發(fā)現(xiàn)這個(gè)插件,所以就嘗試使用了一下,這里將使用方法和遇到的問(wèn)題簡(jiǎn)單記錄一下。 介紹 最近項(xiàng)目中讓實(shí)現(xiàn)一個(gè)導(dǎo)入導(dǎo)出Excel的功能,查找了一些插件后發(fā)現(xiàn)js-xlsx這個(gè)插件,所以就嘗試使用了一下,這里將使用方法和遇到的問(wèn)題簡(jiǎn)單記錄一下。 SheetJS js-xlsx 是一款能夠讀寫多種格式表格的插件,瀏覽器支持良好,并且能在多個(gè)...

    Amio 評(píng)論0 收藏0
  • phpExcel實(shí)現(xiàn)Excel數(shù)據(jù)的導(dǎo)入導(dǎo)出(全步驟詳細(xì)解析)

    摘要:上傳添加需下載類文件,引入到項(xiàng)目類庫(kù)里接收前臺(tái)文件,接收前臺(tái)文件重設(shè)置文件名設(shè)置移動(dòng)路徑表用函數(shù)方法返回?cái)?shù)組創(chuàng)建一個(gè)讀取數(shù)據(jù),可用于入庫(kù)引用類靜態(tài)類設(shè)置為代表支持或以下版本,代表版開始讀取上傳到服務(wù)器中的文件,返回一個(gè)二維數(shù)組 1.上傳添加excel (需下載PHPExcel類文件,引入到項(xiàng)目類庫(kù)里) //接收前臺(tái)文件, public function addExcel() ...

    zengdongbao 評(píng)論0 收藏0
  • 導(dǎo)出CSV文件格式錯(cuò)誤的小結(jié)

    摘要:目前導(dǎo)出方式占用內(nèi)存較大。比如有些狀態(tài)字段,數(shù)據(jù)庫(kù)存的就是數(shù)字或只占一個(gè)字節(jié),完全換成中文狀態(tài)的話,可能達(dá)個(gè)字節(jié)甚至更多。若是必須要用中文形式。中文亂碼解決的話,其實(shí)也很簡(jiǎn)單,函數(shù),將轉(zhuǎn)為編碼,在中打開就不會(huì)錯(cuò)了 問(wèn)題描述:目前、一般情況下,在web開發(fā)過(guò)程中,使用導(dǎo)入導(dǎo)出報(bào)表的情形很多。我們先說(shuō)導(dǎo)出。項(xiàng)目數(shù)據(jù)量多導(dǎo)出行數(shù)較多,50萬(wàn)行左右,選擇的是csv方式導(dǎo)出。針對(duì)以下應(yīng)用場(chǎng)景,導(dǎo)...

    Taonce 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<