97精品一区二区三区在线不卡-97精品在线播放-97蜜桃小说无弹窗-97欧美精品系列一区二区-97色中文字幕a-97视频国产自在自线2020

PHPExcel導(dǎo)出excel表格

2019-08-23 欄目:網(wǎng)站建設(shè)知識 查看(9955)

一、動態(tài)生成的內(nèi)容如何能當(dāng)成文件來下載呢?

方法:1.將Content-Type設(shè)置成application/octet-stream就可以了,即【header('Content-Type: application/octet-stream'); 】

   2.用Content-Disposition設(shè)置下載的文件名,即【header('Content-Disposition: attachment; filename=' . $filename);】

a.基本上的下載程序都是這么寫的:


<?php
    $filename = "document.txt";
    header('Content-Type: application/octet-stream');  
     header('Content-Disposition: attachment; filename=' . $filename);  
    print "Hello!";
?>
b.平時我們也要考慮到瀏覽器的兼容性和中文文件名亂碼的問題:



<?php
    //獲取user agent
    $ua = $_SERVER["HTTP_USER_AGENT"];
    $filename = "文件名.txt";  
    $encoded_filename = urlencode($filename);
    $encoded_filename = str_replace("+", "%20", $encoded_filename);
     
    header('Content-Type: application/octet-stream');

    //判斷是否為IE瀏覽器(IE10以下可以用MSIE判斷,以上不行)
    if (preg_match("/MSIE/", $ua)) {  
       header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');  
    } else if (preg_match("/Firefox/", $ua)) {
        header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');  
    } else {  //其他
        header('Content-Disposition: attachment; filename="' . $filename . '"');  
    }

    print 'ABC';
?>

二、原始一點的方法:發(fā)送header,用附件的表頭發(fā)送到用戶瀏覽器表示是要下載的,然后讀出數(shù)據(jù)庫中的數(shù)據(jù),一條一條的解析,寫入excel格式的文件中


<?php
    /**
     *\n軟換行
     *\r軟空格
     *\t挑格(跳到下一列)
    */
    // 連接數(shù)據(jù)庫
    $db = @mysql_connect('localhost','root','root');

    if(!$db){
        die('Could not connect: ' . mysql_error());
    }

    //設(shè)置字符集
    mysql_query("set names utf8");
    //打開數(shù)據(jù)庫
    mysql_select_db("database");

    $sql = "SELECT * FROM table_name LIMIT 100";
    $result = mysql_query($sql);

    header('Content-Type: application/octet-stream');//下載
    header("Content-Disposition: attachment; filename=sql.xls");//文件
    header("Pragma: no-cache"); //不緩存

    $title = '數(shù)據(jù)庫:vvt,數(shù)據(jù)表:vvt_user,備份日期:'.date('Y/m/d/H/i/s');
    //輸出標(biāo)題并換行(一個'\n'代表一行)
    echo $title."\n";

    //mysql_num_fields返回結(jié)果集中字段的數(shù)量
    $columns_num = mysql_num_fields($result);

    //mysql_field_name返回結(jié)果集中的字段名,
    for($i=0;$i<$columns_num;$i++){
        //輸出字段名稱(表頭)
        echo mysql_field_name($result,$i). "\t";
    }

    //將字段輸出到一行后,下面就是拼接顯示每一行字段對應(yīng)的value
    print("\n");
    
    //添加內(nèi)容(\t是跳列,跳到下一列)
    $tab = "\t";
    //mysql_num_rows返回結(jié)果集行數(shù)
    if($result && mysql_num_rows($result)){
        //得到關(guān)聯(lián)數(shù)組mysql_fetch_assoc,mysql_fetch_row得到索引數(shù)組先循環(huán)數(shù)據(jù)
        while($rows = mysql_fetch_row($result)){
            // var_dump($rows);die;
            $table_data = "";
            //循環(huán)字段數(shù),將每條數(shù)據(jù)對應(yīng)的字段值填入對應(yīng)的地方
            for($j=0;$j<$columns_num;$j++){
                if(!isset($rows[$j])){
                    //沒值就使用'NULL'占位,并拼接"\t"跳到下一格
                    $table_data .= 'NULL'.$tab;
                }elseif($rows[$j]){
                    $table_data .= "{$rows[$j]}".$tab;
                }else{
                    $table_data .= "".$tab;
                }
            }

            $table_data = str_replace($tab.'$',"",$table_data);
            // $table_data .= "\t";
            print(trim($table_data));
            print("\n");
            $i++;
        }
    }

    //關(guān)閉mysql連接
    mysql_close($con);
?>

三、PHPExcel庫

  可以到官網(wǎng)去下載:http://phpexcel.codeplex.com/,解壓后里面有三個目錄

  Classes:此文件夾中是PHPExcel核心類庫文件,我們對excel報表的處理都是通過此文件夾中的類文件來完成的,注意:所有的類名都是以PHPExcel_*開頭的

  Documentation:這個文件夾中存放的是PHPExcel類庫的英文說明文檔

  Examples:是一些小的測試案例,這些小案例對于我們?nèi)腴T是非常有幫助的

  拓展:當(dāng)輸出數(shù)字字符串到excel文件中時,可在數(shù)字字符串前面拼接一個空格即可(或者指定單元格的數(shù)據(jù)類型為文本類型)

<?php
    //引入PHPExcel文件和Excel2007文件(用于輸出.xls的)、Excel5(用于低版本的xls)
    require_once './PHPExcel/Classes/PHPExcel.php';
    require_once './PHPExcel/Classes/PHPExcel/Writer/Excel2007.php';
    require_once './PHPExcel/Classes/PHPExcel/Writer/Excel5.php';

    //實例化PHPExcel對象
    $objExcel = new PHPExcel();
    $objWriter = new PHPExcel_Writer_Excel2007($objExcel);
    // $objWriter = new PHPExcel_Writer_Excel5($objExcel);非2007格式

    //設(shè)置一個活動表(第一個工作表為活動表)
    $objExcel->setActiveSheetIndex(0);
    /*********************************************部分功能說明 start*********************************************/
    //設(shè)置單元格內(nèi)容setCellValue(設(shè)置單元格的值)、setCellValueExplicit(設(shè)置單元格的值,并顯示的指定數(shù)據(jù)的類型)
    $objExcel->getActiveSheet()->setCellValueExplicit('A1','名字',PHPExcel_Cell_DataType::TYPE_STRING);
    $objExcel->getActiveSheet()->setCellValue('A1','名字');

    //文字水平居中setHorizontal
    $objExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal($option);
    //文字垂直居中setVertical
    $objExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical($option);
    // 合并
    $objExcel->getActiveSheet()->mergeCells('A1:B1');
    // 拆分
    $objExcel->getActiveSheet()->unmergeCells('A1:B1');
    //設(shè)置單元格列setWidth(寬度)、setAutoSize(列的寬度剛好為字體內(nèi)容的寬度)
    $objExcel->getActiveSheet()->getColumnDimension('A')->setWidth('10')->setAutoSize(true);
    //設(shè)置字體setName(字體)、setSize(大小)、setBold(粗體)、setUnderline(設(shè)置下劃線)、setItalic(字體傾斜)
    $objExcel->getActiveSheet()->getStyle('A1')->getFont()->setName('黑體')->setSize(20)
                 ->setBold(true)->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE)->setItalic();
    //設(shè)置字體顏色
    $objExcel->getActiveSheet()->getStyle('A1')->getFont()->getColor()
                ->setARGB(PHPExcel_Style_Color::COLOR_BLUE);
    //設(shè)置單元格邊框樣式(getTop、getLeft、getRight、getBottom)
    $objExcel->getActiveSheet()->getStyle('B4')->getBorders()->getLeft()
             ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    //設(shè)置單元格邊背景
    $objExcel->getActiveSheet()->getStyle('B5')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
    //設(shè)置工作表保護(導(dǎo)出的表格為只讀,不能編輯)
    $objExcel->getActiveSheet()->getProtection()->setSheet(true);

    /*********************************************部分功能說明 end*********************************************/
    //輸出到瀏覽器(文件名為中文時要轉(zhuǎn)碼使用iconv或mb_convert_encoding)
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header('Content-Disposition:inline;filename="'.$filename.'.xls"');
    header("Content-Transfer-Encoding: binary");
    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: must-revalidate, post-check=0, pre-check=0");
    header("Pragma: no-cache");
    $objWriter->save('php://output');exit;

?>

下面是部分參數(shù):

  setUnderline的部分參數(shù):
    PHPExcel_Style_Font::UNDERLINE_NONE
    PHPExcel_Style_Font::UNDERLINE_DOUBLE(雙下劃線)
    PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING(雙下劃線)
    PHPExcel_Style_Font::UNDERLINE_SINGLE(下劃線)
    PHPExcel_Style_Font::UNDERLINE_SINGLEACCOUNTING(下劃線)

  setVertical參數(shù):
    PHPExcel_Style_Alignment::VERTICAL_TOP(頂部)
    PHPExcel_Style_Alignment::VERTICAL_CENTER(垂直居中)
    PHPExcel_Style_Alignment::VERTICAL_BOTTOM(底部)
    PHPExcel_Style_Alignment::VERTICAL_JUSTIFY 

  setHorizontal參數(shù):
    PHPExcel_Style_Alignment::HORIZONTAL_GENERAL
    PHPExcel_Style_Alignment::HORIZONTAL_LE
    PHPExcel_Style_Alignment::HORIZONTAL_CENTER(水平居中)
    PHPExcel_Style_Alignment::HORIZONTAL_RIGHT(右對齊)
    PHPExcel_Style_Alignment::HORIZONTAL_FILL
    PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY
    PHPExcel_Style_Alignment::HORIZONTAL_CENTER_CONTINUOUS

四、使用PHPExcel庫對于大數(shù)據(jù)的支持度不是很好,很容易達到php內(nèi)存上限,這里利用fputcsv寫CSV(這是一種逗號分割值文件格式)

<?php 
    // 輸出Excel文件頭,可把excel.csv換成你要的文件名  
    header('Content-Type: application/vnd.ms-excel');  
    header('Content-Disposition: attachment;filename="excel.csv"');  
    header('Cache-Control: max-age=0');     

    $db = @mysql_connect('localhost','root','root');

    if(!$db){
        die('Could not connect: ' . mysql_error());
    }

    //設(shè)置字符集
    mysql_query("set names utf8");
    //打開數(shù)據(jù)庫
    mysql_select_db("database");

    $sql = "SELECT id,'活動名稱',user_id,u_name,reward,CASE r_level WHEN 1 THEN '中獎' WHEN 0 THEN '未中獎' END,CASE type WHEN 1 THEN '獎勵1' WHEN '2' THEN '獎勵2' WHEN 3 THEN '獎勵3' END,add_time FROM tablename";
    $result = mysql_query($sql);

    $head = array('id','活動名稱','用戶id','用戶名','中獎額度','是否中獎','中獎類型','抽獎時間');

    //打開php文件句柄,php://output表示直接輸出到瀏覽器,a表示寫入方式打開
    $fp = fopen('php://output', 'a');

    foreach($head as $key=>$val){
        $head[$key] = mb_convert_encoding($val,'GBK','UTF-8');
    }

    //將數(shù)據(jù)通過fputcsv寫到文件句柄  
    fputcsv($fp,$head);

    //計數(shù)
    $total = 0;

    //每隔1000行刷新一下緩存buffer,不要太大,也不要太小
    $limit = 1000;

    if($result && mysql_num_rows($result)){
        while($rows = mysql_fetch_row($result)){
            $total++;
            if($total == $limit){
                //送出緩沖區(qū)的內(nèi)容
                ob_flush();
                //刷新php程序的緩存
                flush();

                $total = 0;
            }

            foreach($rows as $k=>$v){
                $rows[$k] = mb_convert_encoding($v,'GBK','UTF-8');
            }

            fputcsv($fp,$rows);

        }
    die();
    }

?>




掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流

鄭重申明:慶陽慶軟網(wǎng)絡(luò)科技有限公司以外的任何單位或個人,不得使用該案例作為工作成功展示!
主站蜘蛛池模板: 色在线电影 | 国产丰满老熟妇乱XXX1区 | 日韩激情影院 | 亚洲AV国产精品无码A片 | 从零开始的异世界生活第一季 | 久久精品麻豆日日躁夜夜躁 | 岳艳的胯下做爰岳艳小说 | 国产色女人 | 日b视频免费看 | HEYZO无码中文字幕人妻 | 激情影院在线 | 五月天婷婷在线观看高清 | 亚洲色爽视频在线观看 | 精品无人区麻豆乱码1区2区新区 | 国产免费一区二区在线A片 国产目拍亚洲精品一区 | 最近中文国语字幕在线播放 | 三男玩一女三A片 | 免费播放大片免费观看视频 | 日韩精品在线播放 | 新不夜城综合首页 | 免费看成人www的网站软件 | 一起探恋爱综艺在线观看第八期 | 国产一区二区三区四区精华 | 99re在线精品视频 | 国产一区二区精品尤物 | 日产电影一区二区三区 | 亚洲精品深夜AV无码一区二区 | 麻豆AV久久AV盛宴AV | 日本高清视频色wwwwww色 | 久久成人国产 | 三级毛片在线免费观看 | 婷婷激情五月AV在线观看 | 麻豆精品传媒2024艾秋刺青 | 边吃奶边狠狠躁日韩A片 | 嫩草伊人久久精品少妇AV网站 | 久久AV无码乱码A片无码软件 | 噜噜噜噜天天狠狠 | 奇米777四色影视在线看 | 真人一级一级特黄高清毛片 | 成人无码髙潮喷水A片 | 亚洲伊人久久综合影院2021 |