自己写的excel导出类,实际运用中出现了一些问题:
/**
*
* 2013-10-25 Jingxk
* 导出excel文件的方法
* 调用方法:
*
* 包含类文件
* require_once('include/excelClassDAO.php');
*
* 创建对象
* $excel = new ExportExcel();
*
* 设置文件名
* $excel->setFileName("文件名");
*
* 添加列名行
* $array = array("nihao","她好","大家好");
* $excel->setFirstRow($array);
*
* 设置数据主题
* $array = array(array("nihao","她好","大家好"),array("douhao","我好","好"),);
* $excel->steData($array);
*
* 导出excel
* $excel->excute();
*
*/
class Excel {
public $filename = "default";
/**
* 类载入函数,设置本次返回结果为execl文件类型
* 开启输出缓冲
*/
public function __construct(){
header("Content-Type: application/vnd.ms-excel; charset=UTF-8");
//header("Content-type:application/vnd.ms-excel");
ob_start();
}
/**
* 设置文件名
*/
public function setFileName($filename){
$this->filename = $filename;
}
/**
* 添加一行单列
* 一半用来设置列名,例:
* @param array $array = array('a','b','c')
*
*/
public function setFirstRow($row){
foreach($row as $cell){
echo iconv("utf-8", "gb2312", $cell)."\t";
}
echo "\r\n";
}
/**
* 生成要导出的excel的数据体
*/
public function setData($array){
foreach($array as $row){
foreach($row as $cell){
echo iconv("utf-8", "gb2312", trim($cell))."\t";
}
echo "\r\n";
}
}
/**
* 执行导出功能,输出缓冲区内容,导出excel格式文件
*/
public function excute(){
header("Content-Disposition:attachment;filename=".$this->filename.".xls");
$html = ob_get_contents();
header("Content-Length: ".strlen($html));
unset($html);
ob_end_flush();
exit;
}
}
其中,设置第一行 列名称行 时,第一列的名称不能是“ID”,否则会报“Excel已经检测到“xxx.xls”是SYLK文件,但是不能将其加载。”的弹框(正常弹框一次即可),
还有一个问题是iconv函数转化是如果字符串中存在“·”符号,则转化结果为空,所以尽量不要在数据中
本类适用于utf8格式的php