以下学习笔记均是从慕课网的视频里整理得来,仅作自己学习记录和交流之用,课程链接为 http://www.imooc.com/view/433
学习PHPExcel准备工作
php版本不能太低
保持php版本5.3以上
下载PHPExcel插件
https://github.com/PHPOffice/PHPExcel/archive/1.8.1.zip
解压后提取classes文件夹到工作目录,并重命名为excel
此处还用到了虚拟域名的设置,可以参考下篇博文:http://blog.csdn.net/panjican/article/details/51660751
使用PHPExcel导出文件步骤
方法一:
<?php
header("Content-Type: text/html;charset=utf-8");
$dir = dirname(__FILE__);//找到当前脚本所在路径
require_once $dir."/PHPExcel.php"; //引入文件
$obj = new PHPExcel();// 实例化PHPExcel类,等价于在桌面上新建一个excel表格
$objSheet = $obj->getActiveSheet(); //获得当前活动sheet的操作对象
$objSheet->setTitle('demo'); //给当前活动sheet设置名称
//方法1
$objSheet->setCellValue("A1","姓名")->setCellValue("B1","分数"); //给当前活动sheet填充数据
$objSheet->setCellValue("A2","张三")->setCellValue("B2","50");
$objWriter = PHPExcel_IOFactory::createWriter($obj,"Excel2007"); //按照指定格式生成excel文件
$objWriter->save($dir."/demo.xlsx"); //保存文件
?>
方法二:
<?php
header("Content-Type: text/html;charset=utf-8");
$dir = dirname(__FILE__);//找到当前脚本所在路径
require_once $dir."/PHPExcel.php"; //引入文件
$obj = new PHPExcel();// 实例化PHPExcel类,等价于在桌面上新建一个excel表格
$objSheet = $obj->getActiveSheet(); //获得当前活动sheet的操作对象
$objSheet->setTitle('demo'); //给当前活动sheet设置名称
//方法二
$array = array(
array(),
array("","姓名","分数"),
array("","李四","60"),
array("","王五","100")
);
$objSheet->fromArray($array); //直接加载数据块来填充数据
$objWriter = PHPExcel_IOFactory::createWriter($obj,"Excel2007");
$objWriter->save($dir."/demo_1.xlsx");
?>
PS:推荐使用第一种方法,第一种对内存消耗比较少,且代码可读性更强,而且可以设置单元格的样式
PHPExcel导出MySQL数据库数据
①读取数据并输出到本地文件保存
数据库结构
本人相关文件放置目录位置
dbconfig.php
<?php
$phpexcel = array(
'host' => "127.0.0.1",
'username' => "root",
'password' => "",
'database' => "phpexcel",
'charset' => "utf8"
);
?>
db.php
<?php
require_once dirname(__FILE__)."/dbconfig.php"; //引入配置文件
class db {
public $conn = null;
//构造方法 实例化类时自动调用
public function __construct($config){
$this->conn = mysqli_connect($config['host'],$config['username'],$config['password'],$config['database']) or die(mysqli_connect_error()); //连接数据库
mysqli_query($this->conn, "set names ".$config['charset']) or die(mysqli_connect_error());//设定mysql编码
}
//根据传入sql语句 查询mysql结果集
public function getResult($sql){
$resource = mysqli_query($this->conn,$sql) or die(mysqli_connect_error());//查询sql语句
$res = array();
while($row = mysqli_fetch_assoc($resource)){
$res[] = $row;
}
return $res;
}
//根据传入年级数 查询每个年级的学生数据
public function getDataByGrade($grade){
$sql = "select username,score,class from user where grade=".$grade." order by score desc";
$res = self::getResult($sql);
return $res;
}
}
?>
export.php
<?php
$dir = dirname(__FILE__); //查找当前脚本所在路径
require_once $dir."/db.php";//引入mysql操作类文件
require_once $dir."/PHPExcel.php";//引入PHPExcel文件
$db = new db($phpexcel); //实例化db类 连接数据库
$objPHPExcel = new PHPExcel(); //实例化PHPExcel类,等同于在桌面上新建一个excel
for( $i = 1; $i <= 3; $i++ ){
if($i > 1){
$objPHPExcel->createSheet();//创建新的内置表
}
$objPHPExcel->setActiveSheetIndex( $i - 1 ); //把新创建的sheet设定为当前活动sheet
$objSheet = $objPHPExcel->getActiveSheet(); //获取当前活动sheet
$objSheet->setTitle($i."年级"); //给当前活动sheet起个名字
$data = $db->getDataByGrade($i); //查询每个年级的学生数据
$objSheet->setCellValue("A1","姓名")->setCellValue("B1","分数")->setCellValue("C1","班级");//填充数据
$j = 2;
foreach($data as $key =>$value ){
$objSheet->setCellValue("A".$j,$value['username'])->setCellValue("B".$j,$value['score'])->setCellValue("C".$j,$value['class']."班");
$j++;
}
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5'); //生成excel文件
$objWriter->save($dir."/export_1.xls");//保存文件
?>
在浏览器输入链接地址,并打开
生成的excel文件,打开如下:
②输出至浏览器
export.php
<?php
$dir = dirname(__FILE__); //查找当前脚本所在路径
require_once $dir."/db.php";//引入mysql操作类文件
require_once $dir."/PHPExcel.php";//引入PHPExcel文件
$db = new db($phpexcel); //实例化db类 连接数据库
$objPHPExcel = new PHPExcel(); //实例化PHPExcel类,等同于在桌面上新建一个excel
for( $i = 1; $i <= 3; $i++ ){
if($i > 1){
$objPHPExcel->createSheet();//创建新的内置表
}
$objPHPExcel->setActiveSheetIndex( $i - 1 ); //把新创建的sheet设定为当前活动sheet
$objSheet = $objPHPExcel->getActiveSheet(); //获取当前活动sheet
$objSheet->setTitle($i."年级");
$data = $db->getDataByGrade($i); //查询每个年级的学生数据
$objSheet->setCellValue("A1","姓名")->setCellValue("B1","分数")->setCellValue("C1","班级");//填充数据
$j = 2;
foreach($data as $key =>$value ){
$objSheet->setCellValue("A".$j,$value['username'])->setCellValue("B".$j,$value['score'])->setCellValue("C".$j,$value['class']."班");
$j++;
}
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5'); //生成excel文件
//$objWriter->save($dir."/export_1.xls");//保存文件
browser_export('Excel5','browser_export03.xls'); //输出到浏览器
$objWriter->save("php://output");
function browser_export($type,$filename){
if( $type == "Excel5" ){
// Redirect output to a client’s web browser (Excel5) 告诉浏览器将要输出excel03文件
header('Content-Type: application/vnd.ms-excel');
}elseif( $type == "Excel2007E" ){
// Redirect output to a client’s web browser (Excel2007) 告诉浏览器将要输出excel07文件
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
}
//告诉浏览器将输出文件的名称
header('Content-Disposition: attachment;filename="'.$filename.'"');
//禁止缓存
header('Cache-Control: max-age=0');
/*
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
*/
}
?>
在浏览器输入链接,并打开,页面会弹框提示打开或者下载,打开文件,文件内容跟保存到本地的文件内容是一致的。
PHPExcel导入文件
reader.php
<?php
header("Content-Type:text/html;charset=utf-8");
$dir=dirname(__FILE__);//找到当前脚本所在路径
require $dir."/PHPExcel/IOFactory.php";//引入读取excel的类文件
$filename=$dir."/export_1.xls";
$fileType=PHPExcel_IOFactory::identify($filename);//自动获取文件的类型提供给phpexcel用
$objReader=PHPExcel_IOFactory::createReader($fileType);//获取文件读取操作对象
$sheetName=array("2年级","3年级");
$objReader->setLoadSheetsOnly($sheetName);//只加载指定的sheet
$objPHPExcel=$objReader->load($filename);//加载文件
/**$sheetCount=$objPHPExcel->getSheetCount();//获取excel文件里有多少个sheet
for($i=0;$i<$sheetCount;$i++){
$data=$objPHPExcel->getSheet($i)->toArray();//读取每个sheet里的数据 全部放入到数组中
print_r($data);
}**/
foreach($objPHPExcel->getWorksheetIterator() as $sheet){//循环取sheet
foreach($sheet->getRowIterator() as $row){//逐行处理
if($row->getRowIndex()<2){
continue;
}
foreach($row->getCellIterator() as $cell){//逐列读取
$data=$cell->getValue();//获取单元格数据
echo $data." ";
}
echo '<br/>';
}
echo '<br/>';
}
exit;
?>
打开浏览器输入链接,输出内容如下: