网络营销电子商务研究中心  
How to buy the best prescription safety glasses in Canada? Let's study!
Go Back   网络营销电子商务研究中心 > 网站设计 > PHP
User Name
Password
 
FAQ Members List Calendar Cheap Glasses

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #1   IP: 49.87.3.156
Old 2016-02-19, 06:14 AM
Ukiah Ukiah is offline
初级会员
 
Join Date: 2005-03-11
Posts: 1
Ukiah 现在声名狼藉
Default PHP+MySQL导出Excel的方法

前段时间接了个任务,其中有需要把数据库中的内容导出Excel表格,调了几天的BUG终于完成,下面说一下过程:

1. 导出Excel需要下载PHPExcel包,因为要用到里面的一些头文件。下载网址:http://phpexcel.codeplex.com/

下载完成后要把它和你写的PHP文件在一起,或者其中引用的部分的路径一定要正确,否则会报错。



2. 代码中要包含一些必要的 header 文件:

header("Content-Type: text/html;charset=utf-8");
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="成员工作量.xls"');
header('Cache-Control: max-age=0');

header('Cache-Control: max-age=1');

header ('Expires: Mon, 26 Jul 2014 05:00:00 GMT');
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header ('Cache-Control: cache, must-revalidate');
header ('Pragma: public');

可能其中的一些可有可无,但一些必要的还是要有的,这里就不一一解释每句代码的意思了。



3. 用 PHPExcel 时要先new一个对象:

$objPHPExcel = new PHPExcel();

然后利用此对象对Excel表进行相应的操作。



下面是对Excel的一些属性的操作:

$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");



当要对其中的单元格操作时,要用到setCellValue()函数,如对A1格赋值:

$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', '序号');

4.设置表格宽度:

如:设置B列的列宽为20:$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);



当要想把字符串放到表格时,要先转换类型:

$user = iconv("GBK","UTF-8",$row['user']); //$row['user']是从数据库中取得变量

然后插入:

$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', $user);

最后转换:

$objPHPExcel->getActiveSheet()
->getCell('A1')->setValueExplicit($user, PHPExcel_Cell_DataType::TYPE_STRING);



5.关于导出的Excel的乱码问题:



因为Excel默认的是GBK编码,因此在填入内容之前要先转换编码类型:



首先,此页面的编码要用GBK:

header("Content-Type: text/html;charset=gbk");

当用的是notepad++开发时,选择“以utf-8无BOM格式”。



然后是向数据库发请求时用gbk:

mysql_query("set names 'gbk'");



最后是不要随意引用文件,如:链接数据库的文件:conn.php ,因为两者的编码不一样,会出现乱码,所以最好把引用的文件内容复制过来。



下面附上一段例子代码:

<?php

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Europe/London');

if (PHP_SAPI == 'cli')
die('This example should only be run from a Web Browser');

require_once('PHPExcel.php');

$objPHPExcel = new PHPExcel();

$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");

$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', '序号')
->setCellValue('B1', '学号')
->setCellValue('C1', '姓名')
->setCellValue('D1', '部门')
->setCellValue('E1', '工作量');

$con = mysql_connect("localhost","root","123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("outuser", $con);
mysql_query("set names 'gbk'");
$sql="SELECT * FROM work WHERE state='1' ORDER BY id desc";
$result=mysql_query($sql);
$i = 2;
$id = 1;
while($row=mysql_fetch_array($result))
{
switch($row['department'])
{
case "content":
$row['department'] = "内容部";
break;
case "operate":
$row['department'] = "运营部";
break;
case "front":
$row['department'] = "技术部前端";
break;
case "backstage":
$row['department'] = "技术部后台服务器";
break;
case "move":
$row['department'] = "技术部移动";
break;
case "page":
$row['department'] = "技术部页面";
break;
}

$user = iconv("GBK","UTF-8",$row['user']);
$name = iconv("GBK","UTF-8",$row['name']);
$work = iconv("GBK","UTF-8",$row['work']);

$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.$i, $id)
->setCellValue('B'.$i, $user)
->setCellValue('C'.$i, $name)
->setCellValue('D'.$i, $row['department'])
->setCellValue('E'.$i, $work);

$objPHPExcel->getActiveSheet()
->getCell('B'.$i)->setValueExplicit($user, PHPExcel_Cell_DataType::TYPE_STRING);
$objPHPExcel->getActiveSheet()
->getCell('C'.$i)->setValueExplicit($name, PHPExcel_Cell_DataType::TYPE_STRING);
$objPHPExcel->getActiveSheet()
->getCell('E'.$i)->setValueExplicit($work, PHPExcel_Cell_DataType::TYPE_STRING);

$i++;
$id++;
}
mysql_close($con);

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

$objPHPExcel->getActiveSheet()->setTitle('Simple');

$objPHPExcel->setActiveSheetIndex(0);
header("Content-Type: text/html;charset=gbk");
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="成员工作量.xls"');
header('Cache-Control: max-age=0');

header('Cache-Control: max-age=1');

header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header ('Cache-Control: cache, must-revalidate');
header ('Pragma: public');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
?>
Reply With Quote
 


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
X-Cart Multiple Input Validation Holes Permit SQL Injection and Cross-Site Scripting topvip X-Cart 0 2009-07-21 10:03 AM
用php语言来编写shell脚本 car 代码交流 0 2008-05-05 08:09 PM
Php教程.经验技巧(上) sunshine 代码交流 0 2006-12-15 08:13 PM
Php入门速成 smiling 代码交流 0 2006-12-15 07:30 PM
php.ini中文解释 sunshine 服务器环境搭建 0 2006-02-04 11:05 PM

Prescription-glasses.com offers prescription glasses online at discount prices.
All times are GMT +8. The time now is 11:08 AM.


Powered by vBulletin Version 3.8.7
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.