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