日志

PHP 基于 MySQL数据 导出 EXCEL文件

操作Excel可以使用第三方开源库,例如强大的:PHPEXCEL.

这里主要采用的是非第三方类库依赖,而是基于PHP5原生支持的fputcsv实现,基本可以满足日常需求.

<?php
// 输出Excel文件头 
header('Content-Type: application/vnd.ms-excel;charset=gbk');
header('Content-Disposition: attachment;filename="文件名.csv"');
header('Cache-Control: max-age=0');

// 从数据库中获取数据 
$sql = 'select * from `table` where ……';
$stmt = @mysql->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($fp, $head);

// 计数器 
$cnt = 0;
// 每隔$limit行,刷新一下输出buffer,节约资源 
$limit = 100000;

// 逐行取出数据,节约内存 
while ($row = $stmt->fetch(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);
}