PHP 导出数据到Excel 最简单的方法

php原生方法

直接的

<?php
ob_end_clean();//清除缓冲区,避免乱码
header('Content-type:application/vnd.ms-excel');
header('Content-Disposition:attachment;filename='. $filename .'.xls');//文件名自己取
$THead = array('姓名' ,'性别' ,'年龄' ,'手机' ,'邮箱');//这里是要输出的列头
$TBody = array(//这里是模拟数据     这里的数据来自你要导出的数据  比如查询数据库的数据
	array('name'=>'Tom' ,'sex'=>1 ,'age'=>18 ,'phone'=>'13533335555' ,'email'=>'xxx@xxx.com'),
	array('name'=>'Iory' ,'sex'=>1 ,'age'=>18 ,'phone'=>'13533335555' ,'email'=>'xxx@xxx.com'),
	array('name'=>'Lily' ,'sex'=>1 ,'age'=>18 ,'phone'=>'13533335555' ,'email'=>'xxx@xxx.com'),
);

echo '<table>';//以表格的形式输出  也可以字符串拼接
//输出head
echo '<tr>';
foreach ( $THead as $h )
{
	echo '<th>' . $h . '</th>';//直接输出即可,    
}
echo '</tr>';
//输出body
foreach ( $TBody as $row )
{
	echo '<tr>';
		foreach ($row as $v) {
			echo '<td>' . $v . '</td>';
		}
	echo '</tr>';
}
echo '</table>';//OK   

下面是一个PHP 导出类

<?php
/*
	PHP导出数据 Exc 表格
*/
class OutExc
{
	protected $callback = null;//数据处理函数

	public function setCallBack ($name) {
		if( function_exists($name) ) {
			$this->callback = $name;
		}
	}

	public function output ($filename ,$tHead ,$tBody) {
		//ob_end_clean();//清除缓冲区,避免乱码
		header("Content-type:application/vnd.ms-excel");
		header('Content-Disposition:attachment;filename='. $filename .'.xls');
$str = <<<'EOT'
		<html xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:x="urn:schemas-microsoft-com:office:excel"xmlns="http://www.w3.org/TR/REC-html40">
 		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 		<html> 
     		 <head> 
        		<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
        		<style>td{border:1px solid #ccc;}</style> 
     		</head> 
     	<body>
     	<table border=0 cellpadding=0 cellspacing=0 width=100% style="border-collapse: collapse">
EOT;

     	if( !empty($tHead) ) {//列头
     		$str .= '<thead><tr>';
     		foreach($tHead as $th)
     		{
     			$str .= '<th>'.$th.'</th>';
     		}
     		$str .= '</tr></thead>';
     	}		

     	if( !empty($tBody) ) {
     		$str .= '<tbody>';
     		foreach($tBody as $row)//行数据
     		{
     			$str .= '<tr>';
     			if( null !== $this->callback )
     			{
     				//自定义回调函数  可以过滤数据
     				$row = call_user_func_array($this->callback, array($row));
     			}
     			foreach ($row as $td) {
		     		$str .= '<td>'.$td.'</td>';
		     	}
     			$str .= '</tr>';
     		}
     		$str .= '</tbody>';
     	}

     	$str .= '</table></body></html>';

     	echo $str;
	}
}

下面是用法:

//用最上面的数据   假设你要输出的列头如下
//$tHead = array('姓名' ,'性别' ,'年龄' ,'手机' ,'邮箱');
//$tBody 同最上
$exc = new OutExc;//实例化
$exc->setCallBack('yourCallBack');//如果需要另外处理数据,  设置回调函数  
$exc->output($filename, $tHead ,$tBody);
//回调函数  可以做一些数据的过滤
function yourCallBack($row) {//比如
	$map[] = $row['name'];
	$map[] = $row['sex'] == 1 ? '男' : '女';
	//...  其他..
	return $map; //记得返回数据
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值