PHP将mysql数据库导出为excel表

方法一,利用fputcsv

 代码如下 复制代码

// 输出Excel文件头,可把user.csv换成你要的文件名
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="user.csv"');
header('Cache-Control: max-age=0');

// 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可
$sql = 'select * from tbl where ……';
$stmt = $db->query($sql);

// 打开PHP文件句柄,php://output 表示直接输出到浏览器
$fp = fopen('php://output', 'a');

// 输出Excel列名信息
$head = array('姓名', '性别', '年龄', 'Email', '电话', '……');
foreach ($head as $i => $v) {
// CSV的Excel支持GBK编码,一定要转换,否则乱码
$head[$i] = iconv('utf-8', 'gbk', $v);
}

// 将数据通过fputcsv写到文件句柄
fputcsv($fp, $head);

// 计数器
$cnt = 0;
// 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
$limit = 100000;

// 逐行取出数据,不浪费内存
while ($row = $stmt->fetch(Zend_Db::FETCH_NUM)) {

$cnt ++;
if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题
ob_flush();
flush();
$cnt = 0;
}

foreach ($row as $i => $v) {
$row[$i] = iconv('utf-8', 'gbk', $v);
}
fputcsv($fp, $row);
}

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

 代码如下 复制代码

<?php
/*连接数据库*/
$DB_Server = "localhost";
$DB_Username = "root";
$DB_Password = "123456";
$DB_DBName = "mydb";  //目标数据库名
$DB_TBLName = "mytable";  //目标表名
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Couldn't connect.");
mysql_query("Set Names 'utf8'");

$savename = date("YmjHis"); //导出excel文件名
$file_type = "vnd.ms-excel";
$file_ending = "xls";
header("Content-Type: application/$file_type;charset=utf8");
header("Content-Disposition: attachment; filename=".$savename.".$file_ending");
//header("Pragma: no-cache");

/*写入备注信息*/
$now_date = date("Y-m-j H:i:s");
$title = "数据库名:$DB_DBName,数据表:$DB_TBLName,备份日期:$now_date";
echo("$titlen");

/*查询数据库*/
$sql = "Select * from $DB_TBLName";
$ALT_Db = @mysql_select_db($DB_DBName, $Connect) or die("Couldn't select database");
$result = @mysql_query($sql,$Connect) or die(mysql_error());

/*写入表字段名*/
for ($i = 0; $i < mysql_num_fields($result); $i++) {
 echo mysql_field_name($result,$i) . ",";
}
echo "n";

/*写入表数据*/
$sep = ",t";
while($row = mysql_fetch_row($result)) {
 $data = "";
  for($i=0; $i<mysql_num_fields($result);$i++) {
   if(!isset($row[$i]))
    $data .= "NULL".$sep; //处理NULL字段
   elseif ($row[$i] != "")
    $data .= "$row[$i]".$sep;
   else
    $data .= "".$sep; //处理空字段
  }
 echo $data."n";
}
?>

例3,第二个差不多了

 代码如下 复制代码

//搜索
    $start_time = strtotime($start_date);
    $end_time = strtotime($end_date);
    $sql = "select a.*,b.order_amount,b.money_paid from ".$ecs->table('invoice')." as a ".
                " left join ".$ecs->table('order_info')." as b on a.order_id=b.order_sn".
                " where a.add_time >=".$start_time." and a.add_time <=".$end_time." ";
    $temp_list = $db->getAll($sql);

    if($temp_list){//有数据
        $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);
        $Html.='<table width="700" border="1" align="center" cellpadding="2" cellspacing="1">
                            <tr align="center">
                                    <td align="center" nowrap="nowrap">时间:</td>
                                    <td align="center" nowrap="nowrap" colspan="9">'.$start_date.'~'.$end_date.'</td>
                            </tr>
                            <tr align="center">
                                     <td align="center" nowrap="nowrap">编号</td>
                                     <td align="center" nowrap="nowrap">发票类型</td>
                                     <td align="center" nowrap="nowrap">发票抬头</td>
                                     <td align="center" nowrap="nowrap">发票内容</td>
                                     <td align="center" nowrap="nowrap">订单号</td>
                                     <td align="center" nowrap="nowrap">金额</td>
                                     <td align="center" nowrap="nowrap">添加日期</td>
                                     <td align="center" nowrap="nowrap">收件人</td>
                                     <td align="center" nowrap="nowrap">联系方式</td>
                                     <td align="center" nowrap="nowrap">地址</td>
                           </tr>';
            //取得符合条件的数组
            for($i=0;$i<count($temp_list);$i++){
                 $temp_i = $i+1;
                 if($temp_list[$i][order_amount]==0){
                     $temp_money = $temp_list[$i][money_paid];
                 }else{
                     $temp_money = $temp_list[$i][order_amount];
                 }

                 $temp_time = date('Y-m-d', $temp_list[$i]['add_time']);
                 $Html.='<tr align="center">
                                     <td align="center" nowrap="nowrap">'.$temp_i.'</td>
                                     <td align="center" nowrap="nowrap">'.$temp_list[$i][type_name].'</td>
                                     <td align="center" nowrap="nowrap">'.$temp_list[$i][top].'</td>
                                     <td align="center" nowrap="nowrap">'.$temp_list[$i][content].'</td>
                                     <td align="center" nowrap="nowrap" style="vnd.ms-excel.numberformat:@">'.$temp_list[$i][order_id].'</td>
                                     <td align="center" nowrap="nowrap">'.$temp_money.'</td>
                                     <td align="center" nowrap="nowrap">'.$temp_time.'</td>
                                     <td align="center" nowrap="nowrap">'.$temp_list[$i][user_name].'</td>
                                     <td align="center" nowrap="nowrap">'.$temp_list[$i][mobile].' '.$temp_list[$i][tel].' </td>
                                     <td align="center" nowrap="nowrap">'.$temp_list[$i][address].'</td>
                           </tr>';
             }
             $Html.='</table>';
             $Html.='</body></html>';
             $mime_type = 'application/vnd.ms-excel';
             header('Content-Type: ' . $mime_type);
             header('Content-Disposition: attachment; filename="invoice.xls"');
             header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
             header('Pragma: public');
            echo $Html;

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

 代码如下 复制代码

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

时间: 2024-09-20 08:36:36

PHP将mysql数据库导出为excel表的相关文章

php fputcsv函数将mysql数据库导出到excel文件

fputcsv() 函数将行格式化为 CSV 并写入一个打开的文件. 该函数返回写入字符串的长度.若出错,则返回 false.. 说明 fputcsv() 将一行(用 fields 数组传递)格式化为 CSV 格式并写入由 file 指定的文件.   // 输出Excel文件头,可把user.csv换成你要的文件名 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;f

求C#代码!!关于从Excel表中将数据导入Access数据库,以及Access数据库中的数据导出到Excel表的代码。急!!!晚上就得交差啊

问题描述 我需要从Excel表中将数据导入Access数据库,以及Access数据库中的数据导出到Excel表的代码,越具体越好!!望各位高手能不吝赐教 解决方案 解决方案二:不会吧?难道世间真的是如此残忍?为什么没人理我啊?高手们,算小弟我求你们了!难道是分不够多吗?初出江湖实在是身无分文啊----就不要太在意这个了,好不好啊?给我写写吧,万分感谢了!!解决方案三:这里是利用officeapplication方式来操作excel的http://blog.csdn.net/fangxinggoo

MySQL数据库导出与导入及常见错误解决

MySQL数据库导出与导入的过程中将会发生众多不可预知的错误,本文整理了一些常见错误及相应的解决方法,遇到类似情况的朋友可以参考下,希望对大家有所帮助   MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:Program FilesMySQLMySQL Server 4.1bin (或者直接将windows的环境变量path中添加该目录) 2,导出数据库:mysqldump -u 用户名 -p 数据库名 >

excel-asp.net mvc4如何实现页面数据导出到Excel表,有完整代码吗?本人新手,求大神

问题描述 asp.net mvc4如何实现页面数据导出到Excel表,有完整代码吗?本人新手,求大神 如题,asp.net mvc4如何实现页面数据导出到Excel表,有完整代码吗?本人新手,求大神 解决方案 最简单的方式是使用npoihttp://www.tuicool.com/articles/NNzMNn 解决方案二: 你可以采用OLEDB的方式进行导出,也就是采用数据库的方式,你可以在服务器上面配置一个tmp目录,先将数据文件采用OLEDB导出到这个文件中, 在通过文件下载的方式获取这个

php将数据库导出成excel的方法_php技巧

上传cvs并导入到数据库中,测试成功(部分代码不规范,如PHP_SELF那里要改写成$_SERVER["PHP_SELF"] ) PHP代码 复制代码 代码如下: <?php $fname = $_FILES['MyFile']['name']; $do = copy($_FILES['MyFile']['tmp_name'],$fname); if ($do) { echo"导入数据成功<br>"; } else { echo "&qu

Mysql数据库导出压缩并保存到指定位置备份脚本

  一个脚本用来把所有Mysql数据库导出压缩并保存到指定位置. 内容如下:  代码如下   #!/bin/bash ############################################ # # 这是一个MySQL数据库备份脚本 # 一次把所有数据库导出并gz压缩保存 # ccshaowei#gmail.com # 2013/05/08 # http://www.111cn.net# ############################################ #

MySQL数据库性能优化之表结构优化

很多人都将<数据库设计范式>作为数据库表结构设计"圣经",认为只要按照这个范式需求设计,就能让设计出来的表结构足够优化,既能保证性能优异同时还能满足扩展性要求.殊不知,在N年前被奉为"圣经"的数据库设计3范式早就已经不完全适用了.这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用. 这是 MySQL数据库性能优化专题 系列的第二篇文章:MySQL 数据库性能优化之表结构优化 系列的第一篇文章:MySQL 数据库性能优化之缓存参数优化

link环境下如何用codefirst将数据库导出成excel文件?codefirst可以导出么?

问题描述 link环境下如何用codefirst将数据库导出成excel文件?codefirst可以导出么? link环境下如何用codefirst将数据库导出成excel文件?codefirst可以导出么? 解决方案 这个和codefirst没关系,直接用npoi导出就可以了.

javascript-往数据库上传excel表怎样通过js获取文件全路径

问题描述 往数据库上传excel表怎样通过js获取文件全路径 往数据库上传excel表怎样通过js获取文件全路径 function getFullPath(){ var filepath = getPath(document.getElementById("file")); alert(filepath); //var filepath=getPath(obj); function getPath(obj) { if(obj) { //ie if (window.navigator.u