PHP导出EXCEL的简单函数

使用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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值