找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1480|回复: 0

[分享] dede织梦后台增加php导出到excel功能不出现乱码

[复制链接]
发表于 2018-7-29 10:13:30 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
dede织梦系统怎样导出后台的文章或自定义模型中的数据到excel,并且不出现乱码

在后台目录创建一个php文件toexcel.php,在最上面加入代码;
require_once(dirname(__FILE__).'/config.php');
require_once(DEDEINC.'/typelink.class.php');
require_once(DEDEINC.'/datalistcp.class.php');
require_once(DEDEADMIN.'/inc/inc_list_functions.php');

加入导出到excel类;
  1. class Excel
  2. {   
  3.   private $head;     
  4. private $body;
  5.   public function addHeader($arr){        
  6.   foreach($arr as $headVal){            
  7. $headVal = $this->charset($headVal);            
  8. $this->head .= "{$headVal}\t ";        
  9. }         
  10. $this->head .= "\n";     
  11. }
  12.   public function addBody($arr){         
  13.   foreach($arr as $arrBody){            
  14. foreach($arrBody as $bodyVal){                 
  15. $bodyVal = $this->charset($bodyVal);                 
  16. $this->body .= "{$bodyVal}\t ";            
  17. }            
  18. $this->body .= "\n";        
  19. }     
  20. }
  21.   public function downLoad($filename=''){         
  22.   if(!$filename)            
  23.   $filename = date('YmdHis',time()).'.xls';         
  24.   header("Content-type:application/vnd.ms-excel");         
  25.   header("Content-Disposition:attachment;filename=$filename");         
  26.   header("Content-Type:charset=gb2312");         
  27.   if($this->head)            
  28.   echo $this->head;         
  29.     echo $this->body;     
  30. }
  31.    public function charset($string){         
  32. return mb_convert_encoding($string,'GBK','auto');   
  33.    }
  34. }
复制代码


代码解释:
1.输出列名数组,并转码
  1. public function addHeader($arr){        
  2.   foreach($arr as $headVal){            
  3. $headVal = $this->charset($headVal);            
  4. $this->head .= "{$headVal}\t ";        
  5. }         
  6. $this->head .= "\n";     
  7. }
复制代码



2.输出导出内容数组,并转码
  1. public function addBody($arr){         
  2.   foreach($arr as $arrBody){            
  3. foreach($arrBody as $bodyVal){                 
  4. $bodyVal = $this->charset($bodyVal);                 
  5. $this->body .= "{$bodyVal}\t ";            
  6. }            
  7. $this->body .= "\n";        
  8. }     
  9. }
复制代码


3.设置header头部信息和导出到excel内容,并输出到浏览器
  1. public function downLoad($filename=''){         
  2.   if(!$filename)            
  3.   $filename = date('YmdHis',time()).'.xls';         
  4.   header("Content-type:application/vnd.ms-excel");         
  5.   header("Content-Disposition:attachment;filename=$filename");         
  6.   header("Content-Type:charset=gb2312");         
  7.   if($this->head)            
  8.   echo $this->head;         
  9.     echo $this->body;     
  10. }
复制代码


4.转码,这里不用iconv函数,有可能会与gd冲突导致输出空白。用
  1. public function charset($string){         
  2. return mb_convert_encoding($string,'GBK','auto');   
  3.    }

  4. 7.调用方法;
  5. $excel = new Excel();  
  6. $excel->addHeader(array('列一','列二','列三','列四'));
  7. global $dsql;
  8. $sql="select 列一字段,列二字段,列三字段,列四字段 from 表名";
  9. $dsql->SetQuery($sql);
  10. $dsql->Execute();
  11. while($row = $dsql->GetArray()){
  12. $list[]=$row;
  13. }
  14. unset($row);
  15. $excel->addBody($list);  
  16. $excel->downLoad();
复制代码



后天添加导出到excel代码:

找到后台目录下的templets目录,下面有个content_list.htm文件,
找到<a href="javascript:;" onClick="cAtts('attsDel',event,this)" class="coolbg">&nbsp;删除属性&nbsp;</a>
在后面加一段代码
  1. <?php if($channelid==1) echo " <a href="toexcel.php" class="coolbg" target="_blank">导出到excel</a>\r\n"; ?>
复制代码


$channelid就是你的模型id,根据你导出的表填写。填写完之后打开后台栏目列表就出现导出按钮

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-11-26 11:14 , Processed in 0.041719 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表