php导出excel例子,php使用原生的方法导出excel实例分享
1、前言
有時(shí)需要將數(shù)據(jù)庫(kù)表資源導(dǎo)出excel,做成一些報(bào)表數(shù)據(jù)。
而php導(dǎo)出excel的方法大致有幾種:使用php的類(lèi)庫(kù),進(jìn)行導(dǎo)出,如PHPExcel
使用php原生的方法進(jìn)行導(dǎo)出
而本文介紹的就是,如何通過(guò)原生方法導(dǎo)出excel
2、關(guān)鍵函數(shù)
2.1、ob輸出ob_start();
ob_get_contents
ob_end_clean
fopen
fwrite
fclose
iconv
2.2、header輸出header
iconv
3、使用ob函數(shù)進(jìn)行excel到導(dǎo)出
ob函數(shù)主要分為三步:進(jìn)行緩存的設(shè)置
讀取緩存
寫(xiě)入文件
下面貼上導(dǎo)出的excel類(lèi)
{ // ob函數(shù)緩存的開(kāi)始
public static function start ()
{
ob_start();
} // 獲取緩存內(nèi)容
public static function save ($path)
{
$data = ob_get_contents();
ob_end_clean();
self::writeToExcel($path, $data);
} //寫(xiě)到文件
private static function writeToExcel ($fn, $data)
{
$dir = self::setDir();
$fp = fopen($dir . '/'. $fn, 'wb');
fwrite($fp, $data);
fclose($fp);
} //excel默認(rèn)是GKB,所有要轉(zhuǎn)碼
public static function setChar ($value, $inchar = 'utf-8', $outchar ='gbk')
{
return iconv($inchar, $outchar, $value);//轉(zhuǎn)化編碼
}
//創(chuàng)建目錄,linux系統(tǒng)一般要寫(xiě)到文件,目錄需要w謙虛,而文件需要x權(quán)限,為了省事直接建立子文件夾,可以不需要修改謙虛
public static function setDir($dirName = 'excel')
{ if(!is_dir($dirName)) {
mkdir($dirName);
} return $dirName;
}
}
4、完整頁(yè)面代碼
header('Content-Type: text/html; charset=GBK'); //excel需要GBK編碼,為了防止轉(zhuǎn)碼產(chǎn)生的亂碼,需要設(shè)置成GBK
require 'coon.php';
require 'excel.class.php';
$sql = 'select * from user';
$res = $link->query($sql); //判斷是否有發(fā)送get數(shù)據(jù)
if(isset($_GET['id'])){
$name = empty($_GET['id']) ? 'a' . rand(1000,9999) : $_GET['id'] ;
$filename = $name . '.xls'; //設(shè)置緩存的開(kāi)始 Excel::start();
}?>
echo '
echo ''; //設(shè)置thead輸出
echo '
' . Excel::setChar('編號(hào)') . '';echo '
' . Excel::setChar('用戶(hù)名') . '';echo '
' . Excel::setChar('密碼') . '';echo '
';?>echo '
'; //設(shè)置tbody輸出while($re = $res->fetch(PDO::FETCH_ASSOC)){
echo '
';echo '
' . Excel::setChar($re['id']) . '';echo '
' . Excel::setChar($re['user']) . '';echo '
' . Excel::setChar($re['pwd']) . '';echo '
';}
echo '
';?>}if(isset($_GET['id'])){
echo '' .Excel::setChar('完成') .'';
}else{
echo '' . Excel::setChar('導(dǎo)出') .'';
}?>
5、使用header下載excel
使用ob函數(shù)導(dǎo)出excel只能保存到服務(wù)器,不能提供下載(特殊處理下還是可以的);下面介紹使用header()函數(shù)來(lái)導(dǎo)出并下載excel
主要兩個(gè)header()函數(shù)
header("Content-type:application/vnd.ms-excel");//指定文件類(lèi)型
header("Content-Disposition:filename=a.xls" ); //指定下載文件名
其他做法和ob函數(shù)的導(dǎo)出相同(下面完整代碼)
//下載主要靠這兩個(gè)
header("Content-type:application/vnd.ms-excel");//指定文件類(lèi)型
header("Content-Disposition:filename=a.xls" ); //指定下載文件名require 'coon.php';
require 'excel.class.php';
$sql = 'select * from user';
$res = $link->query($sql);?>
//頁(yè)面輸出一般是不需要轉(zhuǎn)碼的,excel輸出才需要轉(zhuǎn)碼
echo '
echo ''; //設(shè)置thead輸出
echo '
' . Excel::setChar('編號(hào)') . '';echo '
' . Excel::setChar('用戶(hù)名') . '';echo '
' . Excel::setChar('密碼') . '';echo '
';?>echo '
'; //設(shè)置tbody輸出while($re = $res->fetch(PDO::FETCH_ASSOC)){
echo '
';echo '
' . Excel::setChar($re['id']) . '';echo '
' . Excel::setChar($re['user']) . '';echo '
' . Excel::setChar($re['pwd']) . '';echo '
';}
echo '
';?>6、結(jié)語(yǔ)
這里只簡(jiǎn)單介紹了excel的導(dǎo)出和下載,一個(gè)是使用ob()函數(shù),一個(gè)是使用header()函數(shù),兩種方法大同小異,但都需要注意的是excel需要GBK編碼,需要使用iconv函數(shù)進(jìn)行轉(zhuǎn)碼,才能保證不出現(xiàn)亂碼。
總結(jié)
以上是生活随笔為你收集整理的php导出excel例子,php使用原生的方法导出excel实例分享的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python seaborn boxpl
- 下一篇: 3D bin picking(散乱零件抓