PHP导出MySQL数据到Excel文件(fputcsv)

PHP导出MySQL数据到Excel文件(fputcsv),第1张

这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件。

复制代码

代码如下:

//

输出Excel文件头,可把usercsv换成你要的文件名

header('Content-Type:

application/vndms-excel');

header('Content-Disposition:

attachment;filename="usercsv"');

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);

}

优点简单易用,非常节省内存,不依赖第三方类库。

PHP从数据库分多次读取100万行记录,和分多次将100万行写入文本文件都没问题

Excel可以支持100万行记录,Excel 2003最大支持65536行,从2007版开始支持104万行了,目前2007的盗版应该比较普及了-_-! 问清楚你的客户是什么版本。

你要导出excel的理由是非常充分和正确的,应该继续坚持。业务人员最熟悉的就是Excel,实在不熟悉现学现用也比别的快。只是要注意,当数据量达到10万行这个级别时,Excel的公式填充将会非常非常慢,如果再有LOOKUP()公式,基本上十分钟内处理CPU满载进程管理器杀不掉的状态,这时候其实xampp + phpmyadmin是一个易用性和性能都最平衡的选择

PHPExcel输出的是Excel XML格式,有个XML头和尾,中间是数据Body,需要将100万行都赋值给一个数组才可以调用PHPExcel->write(),这容易导致PHP执行超时或者内存超限,你不妨调整一下phpini配置,把超时时间和内存限制都改到很大

如果是输出csv格式,那就太简单了,你的问题可能是没给字段内容加引号,加上引号再调用fputcsv试试?其实fputcsv做的事情特别简单,你甚至可以不管它,自己把CSV文件的每一行拼接好了之后用file_put_contents写入 希望能帮到你,我还要抓紧时间自己在后盾人自己学习呢,一起加油吧(「・ω・)「嘿

$fp = fopen('php://output', 'a');

// 输出Excel列名信息

$head = array("电子邮件");

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;

// 逐行取出数据,不浪费内存

$count = count($email);

for($t=0;$t<$count;$t++) {

$cnt ++;

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

ob_flush();

flush();

$cnt = 0;

}

$row[] = $email[$t];

foreach ($row as $i => $v) {

$row[$i] = iconv('utf-8', 'gbk', $v);

}

fputcsv($fp, $row);

unset($row);

}

以上就是关于PHP导出MySQL数据到Excel文件(fputcsv)全部的内容,包括:PHP导出MySQL数据到Excel文件(fputcsv)、怎么将php数据导出excel、php怎么导出大量数据的Excel等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9849347.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存