php导出excel中的一些问题

php导出excel类

自己写的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

作者: 二皮

Hackers please go away