用户信息
帖子内容
1 楼
shadoweb
钻石会员
积分 1158
注册 2014-11-27
     
[免费](PHP)JTBC1.0导出excel功能核心代码

这里分享的代码是通过控制输出table的形式来实现导出excel的


先上代码

//导出
function wdja_cms_admin_manage_export(){
  header("Content-type: text/html; charset=utf-8"); 
  set_time_limit(0);
  ini_set('memory_limit','1024M');//设置导出最大内存
  $ranking =array();
  $ranking = wdja_cms_admin_manage_getAll();
  //输出的表头
  $_pre    = array(
    "bid"           =>  "ID",
    "b_genre"       =>  "模块",
    "b_topic"       =>  "标题",
    "b_url"        =>  "网址",
    "b_type"       =>  "方式",
    "b_update"     =>  "更新时间",
  );
  $date = date("YmdHis");//日期作为输出文件后缀
  $content = getXLSFromList($_pre,$ranking);//获得输出的表格内容
  header("Content-type:application/vnd.ms-excel;charset=gb2312");//设置导出格式
  header("Content-Disposition:attactment;filename=".$date.".xls");//设置导出文件名
  header("Pragma: no-cache");
  header("Expires: 0");
  echo $content;
  exit;
}
function getXLSFromList($pres,$lists){
  //header("Content-type: text/html; charset=utf-8"); 
  // 内容太大建议搜索少量再导出
  //    if(count($lists)>=20000)
  //    {
  //        header("Content-Type:text/html;charset=utf-8");
  //        echo "<br/><h1 style='color:red'>Export data is too large, please narrow your search!</h1><br/>";
  //        exit;
  //    }
  $keys=array_keys($pres);//获取表头的键名
  $content='<meta http-equiv="Content-Type" content="text/html; charset=gb2312">';
  $content.="<table border='1'><tr>";
  //输出表头键值
  foreach($pres as $_pre){
    $val = iconv('utf-8','gb2312',$_pre);
    $content.="<td>$val</td>";
  }
  $content.="</tr>";
  foreach($lists as $_list){
    //print_r($_list);exit;
    $content.= "<tr>";
    foreach($keys as $key){
      $val = iconv('utf-8','gb2312',$_list[$key]);
      $content.= "<td style='vnd.ms-excel.numberformat:@'>".$val."</td>"; //style样式将导出的内容都设置为文本格式 输出对应键名的键值 即内容
    }
    $content.="</tr>";
  }
  $content.="</table>";
  return $content;
}
function wdja_cms_admin_manage_getAll()
{
  global $conn, $slng;
  global $ngenre;
  global $ndatabase, $nidfield, $nfpre;
  $tmprstr = '';
  $tsqlstr = "select * from $ndatabase where " . ii_cfname('lng') . "='$slng'";
  $tsqlstr .= " order by " . ii_cfname('time') . " desc";
  $trs = ii_conn_query($tsqlstr, $conn);
  $array = array();
  $i=0;
  while($arr=mysqli_fetch_assoc($trs)){
    $array[$i] = $arr;
    $i++;
  }
  $res = $array;
  return $res;
}
//导出


如何使用及重点说明


使用,请在

function wdja_cms_admin_manage_action()

中添加

    case 'export':
      wdja_cms_admin_manage_export();
      break;



模板中加个链接 genre/manage.php/?action=export  点击即可直接导出


导出的列如何控制

只需在function wdja_cms_admin_manage_export(){中修改

//输出的表头
  $_pre    = array(
    "bid"           =>  "ID",
    "b_genre"       =>  "模块",
    "b_topic"       =>  "标题",
    "b_url"        =>  "网址",
    "b_type"       =>  "方式",
    "b_update"     =>  "更新时间",
  );


这里的是取导出的模块对应的字段名,带前缀的.然后自定义对应的表头中文或英文即可


其中wdja_cms_admin_manage_getAll();是获取模块全部数据的.


其中function getXLSFromList($pres,$lists){是把数据格式化输出的函数,这里可以添加一个分页参数,就能控制生成分表了.当然要更改一些代码的.留给大家自己发挥吧.


其它的就没什么要注意的.

只需要把以上代码放在模块中的manage_config.inc.php文件中,即可快速实现导出功能了.


如果要做得更好,可以通过做成插件的形式来实现.简单说就是字段和模块控制可以配置即可.






本帖由 shadoweb 于 2019-07-03 08:26:52 编辑过
2019-06-22 09:07:55 JTBC教程网 https://www.jtbc.com.cn/ 客服QQ858512104 微信 shadoweb
2 楼
shadoweb
钻石会员
积分 1158
注册 2014-11-27
     
回复: (PHP)JTBC1.0分享导出excel功能核心代码

3.0一样的道理,只需更改部分代码即可.

2019-06-22 09:33:42 JTBC教程网 https://www.jtbc.com.cn/ 客服QQ858512104 微信 shadoweb
3 楼
jzykk
注册会员
积分 16
注册 2017-09-28
     
回复: (PHP)JTBC1.0导出excel功能核心代码
感谢影子的教程。👍
2019-06-22 17:47:03