使用PHPExcel类库
<?php
include_once('Classes/PHPExcel.php');
include_once('Classes/PHPExcel/Writer/IWriter.php');
include_once('Classes/PHPExcel/Writer/Excel2007.php');
include_once('Classes/PHPExcel/IOFactory.php');
date_default_timezone_set("Etc/GMT-8");//设置时区
function export_excel($array){
require_once('Classes/PHPExcel.php');
require_once('Classes/PHPExcel/Writer/IWriter.php');
require_once('Classes/PHPExcel/Writer/Excel2007.php');
require_once('Classes/PHPExcel/IOFactory.php');
$data = $array;
// 创建phpexcel对象
$m_objPHPExcel = new PHPExcel();
/* 设置输出的excel文件为2007兼容格式 */
$objWriter = new PHPExcel_Writer_Excel2007($m_objPHPExcel);
// 输出EXCEL文件名
$m_strOutputExcelFileName = date('Y-m-j_H_i_s').".xlsx";
// 输出文件保存路径,此路径必须可写
$m_strOutputPath = "./developer";
// 设置第一个工作簿为活动工作簿
$m_objPHPExcel->setActiveSheetIndex(0);
// 如果是中文一定要使用iconv函数转换编码
$m_objPHPExcel->getActiveSheet()->setTitle('Article&Author');
// 设置默认字体和大小
$m_objPHPExcel->getDefaultStyle()->getFont()->setName('Arial Unicode MS');
$m_objPHPExcel->getDefaultStyle()->getFont()->setSize(10);
//设置单元格的值
$m_objPHPExcel->getActiveSheet()->setCellValue('A1', '大会建议分组');
$m_objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(12);
iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("output_encoding", "UTF-8");
$i = 2;
$j = "A";
foreach($data as $key=>$value)
{/* excel文件内容 */
foreach($value as $key2=>$value2)
{
$m_objPHPExcel->getActiveSheet()->setCellValue($j.$i,$value2);
$j++;
}
$j = "A";
$i++;
}
/* 生成文件 */
$objWriter->save($m_strOutputPath.$m_strOutputExcelFileName);
/* 生成到浏览器,提供下载 */
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
header("content-Type: text/html; charset=UTF-8"); //设置字符的编码是utp-8
//header("Content-Transfer-Encoding:UTF-8");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
header('Content-Disposition:inline;filename="'.$m_strOutputExcelFileName.'"');
$objWriter->save('php://output');
}
export_excel($testdata);
?>
【存在的问题】
[注]:mysql数据库为utf-8
一、网上流行的一些函数
function export($data)
{
$data = iconv("utf-8","gb2312", $data);
$filename = "data".date("YmdHis").".xls";
header("Content-Type:application/vnd.ms-excel");
Header("Accept-Ranges:bytes");
Header("Content-type:charset=utf-8");
header("Content-Disposition: attachment;filename=".$filename);
header("Pragma: no-cache");
header("Expires: 0");
}
//$data这个变量如果是数组的话在函数里应该对数组进行分解,在excel里的分列用'\t',分行用'\n',iconv转码会出错,原因:
1、无论编码是utf-8还是gb2312,因为我的$data数据是从编码为utf-8的mysql的数据库里查出,经过自己测试发现无论charset=两者中的任何一个,$data必须经过iconv转码为相应的格式才可以正常显示汉字;
2、经本人测试,iconv遇到一些字符会出错;
二、用$table="<metahttp-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/><table><tr><td></td></tr></table>"这种格式,函数为:
function export($data)
{
$filename= "data".date("YmdHis").".xls";
header("Content-Type:application/vnd.ms-excel");
Header("Accept-Ranges:bytes");
Header("Content-type:charset=utf-8");
header("Content-Disposition: attachment;filename=".$filename);
header("Pragma: no-cache");
header("Expires: 0");
}
即去掉:$data =iconv("utf-8", "gb2312", $data);
但是必须要加上<metahttp-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />,这行内容可以保证如果从mysql数据库查询数据为空的情况下,其它的汉字也可以正常显示
用<table></table>的好处:
1、写法与html相似,可以在程序里加入一些样式,导出的excel比较好看;
2、省去了汉字编码经常出错的麻烦
3、由于不需要用iconv这个函数,可以导出正确的汉字数据
问题转载自CSDN博客 http://blog.csdn.net/risun2008/archive/2008/06/11/2535089.aspx