
我就贴下我当时生成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表格中去呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)