当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP将mysql数据库导出为excel表

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-10 12:29:23 浏览: 评论:0 

利用php导出mysql数据库为excel表格的方法很多,最简单的就直接使用php fputcsv函数了,还有就是直接输入csv格式也是可以了,要生成excel标准格式我们需使用第三方插件了.

方法一,利用fputcsv,代码如下:

  1. // 输出Excel文件头,可把user.csv换成你要的文件名  
  2. header('Content-Type: application/vnd.ms-excel');  
  3. header('Content-Disposition: attachment;filename="user.csv"');  
  4. header('Cache-Control: max-age=0'); 
  5.  
  6. // 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可  
  7. $sql = 'select * from tbl where ……';  
  8. $stmt = $db->query($sql); 
  9.  
  10. // 打开PHP文件句柄,php://output 表示直接输出到浏览器  
  11. $fp = fopen('php://output''a'); 
  12.  
  13. // 输出Excel列名信息  
  14. $head = array('姓名''性别''年龄''Email''电话''……');  
  15. foreach ($head as $i => $v) {  
  16. // CSV的Excel支持GBK编码,一定要转换,否则乱码  
  17. $head[$i] = iconv('utf-8''gbk'$v);  
  18.  
  19. // 将数据通过fputcsv写到文件句柄  
  20. fputcsv($fp$head); 
  21.  
  22. // 计数器  
  23. $cnt = 0;  
  24. // 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小  
  25. $limit = 100000; 
  26.  
  27. // 逐行取出数据,不浪费内存  
  28. while ($row = $stmt->fetch(Zend_Db::FETCH_NUM)) { 
  29. //开源代码phpfensi.com 
  30. $cnt ++;  
  31. if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题  
  32. ob_flush();  
  33. flush();  
  34. $cnt = 0;  
  35.  
  36. foreach ($row as $i => $v) {  
  37. $row[$i] = iconv('utf-8''gbk'$v);  
  38. }  
  39. fputcsv($fp$row);  

方法二,直接在浏览器用header输出csv格式的数据,代码如下:

  1. <?php  
  2. /*连接数据库*/ 
  3. $DB_Server = "localhost"
  4. $DB_Username = "root";  
  5. $DB_Password = "123456";  
  6. $DB_DBName = "mydb";  //目标数据库名 
  7. $DB_TBLName = "mytable";  //目标表名 
  8. $Connect = @mysql_connect($DB_Server$DB_Username$DB_Passwordor die("Couldn't connect.");  
  9. mysql_query("Set Names 'utf8'"); 
  10.  
  11. $savename = date("YmjHis"); //导出excel文件名 
  12. $file_type = "vnd.ms-excel";  
  13. $file_ending = "xls";  
  14. header("Content-Type: application/$file_type;charset=utf8");  
  15. header("Content-Disposition: attachment; filename=".$savename.".$file_ending");  
  16. //header("Pragma: no-cache"); 
  17.  
  18. /*写入备注信息*/ 
  19. $now_date = date("Y-m-j H:i:s");  
  20. $title = "数据库名:$DB_DBName,数据表:$DB_TBLName,备份日期:$now_date";  
  21. echo("$titlen"); 
  22.  
  23. /*查询数据库*/ 
  24. $sql = "Select * from $DB_TBLName";  
  25. $ALT_Db = @mysql_select_db($DB_DBName$Connector die("Couldn't select database");  
  26. $result = @mysql_query($sql,$Connector die(mysql_error()); 
  27.  
  28. /*写入表字段名*/ 
  29. for ($i = 0; $i < mysql_num_fields($result); $i++) {  
  30.  echo mysql_field_name($result,$i) . ",";  
  31. }  
  32. echo "n"
  33.  
  34. /*写入表数据*/ 
  35. $sep = ",t";  
  36. while($row = mysql_fetch_row($result)) {  
  37.  $data = "";  
  38.   for($i=0; $i<mysql_num_fields($result);$i++) {  
  39.    if(!isset($row[$i]))  
  40.     $data .= "NULL".$sep//处理NULL字段 
  41.    elseif ($row[$i] != "")  
  42.     $data .= "$row[$i]".$sep;  
  43.    else  
  44.     $data .= "".$sep//处理空字段 
  45.   }  
  46.  echo $data."n";  
  47. ?> 

例3,第二个差不多了,代码如下:

  1. //搜索 
  2.     $start_time = strtotime($start_date); 
  3.     $end_time = strtotime($end_date); 
  4.     $sql = "select a.*,b.order_amount,b.money_paid from ".$ecs->table('invoice')." as a "
  5.                 " left join ".$ecs->table('order_info')." as b on a.order_id=b.order_sn"
  6.                 " where a.add_time >=".$start_time." and a.add_time <=".$end_time." "
  7.     $temp_list = $db->getAll($sql); 
  8.  
  9.     if($temp_list){//有数据 
  10.         $Html='<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><body>'.chr(13).chr(10); 
  11.         $Html.='<table width="700" border="1" align="center" cellpadding="2" cellspacing="1"
  12.                             <tr align="center"
  13.                                     <td align="center" nowrap="nowrap">时间:</td> 
  14.                                     <td align="center" nowrap="nowrap" colspan="9">'.$start_date.'~'.$end_date.'</td> 
  15.                             </tr> 
  16.                             <tr align="center"
  17.                                      <td align="center" nowrap="nowrap">编号</td> 
  18.                                      <td align="center" nowrap="nowrap">发票类型</td> 
  19.                                      <td align="center" nowrap="nowrap">发票抬头</td> 
  20.                                      <td align="center" nowrap="nowrap">发票内容</td> 
  21.                                      <td align="center" nowrap="nowrap">订单号</td> 
  22.                                      <td align="center" nowrap="nowrap">金额</td> 
  23.                                      <td align="center" nowrap="nowrap">添加日期</td> 
  24.                                      <td align="center" nowrap="nowrap">收件人</td> 
  25.                                      <td align="center" nowrap="nowrap">联系方式</td> 
  26.                                      <td align="center" nowrap="nowrap">地址</td> 
  27.                            </tr>'; 
  28.             //取得符合条件的数组 
  29.             for($i=0;$i<count($temp_list);$i++){ 
  30.                  $temp_i = $i+1; 
  31.                  if($temp_list[$i][order_amount]==0){ 
  32.                      $temp_money = $temp_list[$i][money_paid]; 
  33.                  }else
  34.                      $temp_money = $temp_list[$i][order_amount]; 
  35.                  } 
  36.  
  37.                  $temp_time = date('Y-m-d'$temp_list[$i]['add_time']); 
  38.                  $Html.='<tr align="center"
  39.                                      <td align="center" nowrap="nowrap">'.$temp_i.'</td> 
  40.                                      <td align="center" nowrap="nowrap">'.$temp_list[$i][type_name].'</td> 
  41.                                      <td align="center" nowrap="nowrap">'.$temp_list[$i][top].'</td> 
  42.                                      <td align="center" nowrap="nowrap">'.$temp_list[$i][content].'</td> 
  43.                                      <td align="center" nowrap="nowrap" style="vnd.ms-excel.numberformat:@">'.$temp_list[$i][order_id].'</td> 
  44.                                      <td align="center" nowrap="nowrap">'.$temp_money.'</td> 
  45.                                      <td align="center" nowrap="nowrap">'.$temp_time.'</td> 
  46.                                      <td align="center" nowrap="nowrap">'.$temp_list[$i][user_name].'</td> 
  47.                                      <td align="center" nowrap="nowrap">'.$temp_list[$i][mobile].' '.$temp_list[$i][tel].' </td> 
  48.                                      <td align="center" nowrap="nowrap">'.$temp_list[$i][address].'</td> 
  49.                            </tr>'; 
  50.              } 
  51.              $Html.='</table>'
  52.              $Html.='</body></html>'
  53.              $mime_type = 'application/vnd.ms-excel'
  54.              header('Content-Type: ' . $mime_type); 
  55.              header('Content-Disposition: attachment; filename="invoice.xls"'); 
  56.              header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
  57.              header('Pragma: public'); 
  58.             echo $Html

有时excel会自动把数字转换格式,于是有些手机号码,身份证之类的就乱了,因此可以在导出时,先定义好如下代码:

<td align="center" nowrap="nowrap" style="vnd.ms-excel.numberformat:@">'.$temp_list[$i][order_id].'</td>

Tags: PHP导出excel mysql数据库导出excel

分享到: