PHP实现把mysql数据库中的表的数据导出到excel

PHP实现把mysql数据库中的表的数据导出到excel,第1张

我就贴下我当时生成EXCEL的代码,LZ可以参照,修改,然后直接访问这个PHP文件,就会自动生成EXCEL,

<php

header('Content-type: text/html; charset=utf-8');

header("Content-type:application/vndms-excel;charset=UTF-8");

header("Content-Disposition:filename=testxls"); //输出的表格名称

echo "ID\t";echo "name\t\n";

//这是表格头字段 加\T就是换格,加\T\N就是结束这一行,换行的意思

$conn = mysql_connect("localhost","用户名","密码") or die("不能连接数据库");

mysql_select_db("数据库名", $conn);

mysql_query("set names 'UTF-8'");

$sql="SQL语句";

$result=mysql_query($sql);

while($row=mysql_fetch_array($result)){

echo $row[0]"\t";echo $row[1]"\t\n";

}

>

这里的方法是利用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);

}

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

如果你要求的excle表格不是很复杂 可以用html的table表格来实现因为excle的兼容性可以打开xml文档所以你可以使用html文件来当做excle文件

如果比较复杂 ,就要使用phpexcle了

这个是网页自动导出的基本思路

如果只是导出几个少数的表和内容

你可以使用phpmyadmin的导出功能能够实现导出excle文档

如果将数据导出成excel,需要用到PHPExcel,这个可以百度一下。

要实现这个功能,代码是比较多的,下面是我的代码,肯定不能兼容你的,需要修改。

if ($_POST["outputExcelBtn"]){

define('EOL',(PHP_SAPI == 'cli')  PHP_EOL : '<br />');

require_once 'PHPExcel/Classes/PHPExcelphp';

$objPHPExcel = new PHPExcel();

$objPHPExcel->getProperties()->setCreator("CG")

 ->setLastModifiedBy("CG")

 ->setTitle("CG")

 ->setSubject("CG")

 ->setDescription("CG")

 ->setKeywords("CG")

 ->setCategory("CG");

$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial')

  ->setSize(10);

$objPHPExcel->getActiveSheet()->setCellValue('A1', '编号')

  ->setCellValue('B1', '产品名字')

  ->setCellValue('C1', '产品属性')

  ->setCellValue('D1', '添加日期')

  ;

$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);

$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(30);

$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);

$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15);

$i=2;

while ($f=$rs->movenext()){//这里是查询数据的代码,请用你自己的(本程序由[且听风吟福利吧3tiicom]提供)

$objPHPExcel->getActiveSheet()->setCellValue('A'$i, $f["p_num"])

->setCellValue('B'$i, $f["p_name"])

->setCellValue('C'$i, $f["p_pra"])

->setCellValue('D'$i, date('Y-m-d',$f["p_date"]))

;

$objPHPExcel->getActiveSheet()->getStyle('A'$i':D'$i)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

$i++;

}

$objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true);

$objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//上下对齐

$objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //左右对齐

$objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);

$objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);

    $objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getFill()->getStartColor()->setARGB('FF808080');

$objPHPExcel->getActiveSheet()->setTitle('产品表');//重命名工作表

$objPHPExcel->setActiveSheetIndex(0);//设置打开excel时显示的工作表

$callStartTime = microtime(true);

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

$filename='PDT'(date('Y-m-d'));

$objWriter->save(PATH_CREATEiconv('utf-8','gb2312',$filename)'xls');

$objPHPExcel = PHPExcel_IOFactory::load(PATH_CREATEiconv('utf-8','gb2312',$filename)'xls');

$notice='导出Excel成功,文件名为<span class="red">'$filename'xls</span>,<a href="'$filename'xls">点此下载</a>';

}

因为你说的需要有一个按钮触发事件,所以outputExcelBtn就是按钮名字

<input type="submit" name="outputExcelBtn" value="导出excel" />

网上有很多人问这个的,回答的人很少,要么是自己解决了不想让其他人知道,要么是不能用,这个是在一直用的,没问题。

php导出大量数据到Excel,可以通过生成多个Excel文件,然后压缩成压缩包解决。

方案是:假如我们数据库有10w条数据,每2000条数据生成一个Excel文件,这样每次只要从数据库里查询出2000条数据即可,一定要分页去查询。

原因:主要是数据库性能和写文件性能。分页查询可以解决数据库压力的问题, 生成多个文件可以解决单个文件太大,后期维护Excel文件的问题。

要注意的:

1 在导出逻辑文件开头,一定要声明 set_time_limit(0) ,防止脚本超时;

2 每个文件生成后,适当的sleep一下,让程序休息一下下;

3 因为一次导出最后要将生成的多个Excel文件打包成一个压缩包,所以要删除掉生成的Excel文件,节省服务器存储空间;

这是我以前写的较简单的,

<php

header('Content-type:

text/html;

charset=utf-8');

header("Content-type:application/vndms-excel;charset=UTF-8");

header("Content-Disposition:filename=testxls");

$conn

=

mysql_connect("localhost","用户名","密码")

or

die("不能连接数据库");

mysql_select_db("数据库名",

$conn);

mysql_query("set

names

'UTF-8'");

$sql="这里是SQL语句";

$result=mysql_query($sql);

while($row=mysql_fetch_array($result)){

echo

$row[0]"\t";echo

$row[1]"\t\n";

//这里的\t是下一个数据,\t\n是换行

}

>

你直接套用这个格式,然后将参数什么的填进去,还有就是SQL语句写一下,然后输出的内容格式换行什么的,你自己注意下,然后执行文件,就会自动提示你保存了

#导出csv

header("Content-type: text/html;charset=utf-8");

$filename="测试";

header("Content-Type: text/csv");

header("Content-Disposition: attachment; filename="iconv("utf-8","gb2312",$filename)"csv");

header('Cache-Control:must-revalidate,post-check=0,pre-check=0');

header('Expires:0');

header('Pragma:public');

echo iconv("utf-8","gb2312","123456\n");

#导出Excel

header("Content-Type: application/vndms-execl");

header("Content-Disposition: attachment; filename=myExcelxls");

header("Pragma: no-cache");

header("Expires: 0");

/first line/

echo "hello""\t";

echo "world""\t";

echo "\t\n";

/start of second line/

echo "this is second line""\t";

echo "Hi,pretty girl""\t";

echo "\t\n";

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写入 希望能帮到你,我还要抓紧时间自己在后盾人自己学习呢,一起加油吧(「・ω・)「嘿

以上就是关于PHP实现把mysql数据库中的表的数据导出到excel全部的内容,包括:PHP实现把mysql数据库中的表的数据导出到excel、PHP导出MySQL数据到Excel文件(fputcsv)、用php如何把查询到的数据导进excel表格中去呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存