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; //记得返回数据
}