>>>>>>此内容版权属于imooc的Veo老师<<<<<<php
感兴趣的小伙伴移步至http://www.imooc.com/learn/433进行视频查看
html
------------------------------我是笔记分割线------------------------------------
mysql
PHPExcel导出文件步骤解析 (将网页上的文本数据或数据库里的数据导出到Excel表中)
sql
Excel类比 | PHPExcel导出步骤 |
新建一个Excel表格 | - 实例化PHPExcel类 |
建立sheet(内置表) | - createSheet()方法(建立一个新的sheet) |
- setActiveSheetIndex方法 (把某个sheet设置sheet为当前活动的sheet) | |
- getActiveSheet方法(得到当前活动sheet的操做对象) | |
填充数据 | - setCellValue()方法 |
保存文件 | - PHPExcel_IOFactory::createWriter()方法 |
- save()方法 |
demo.php数据库
<?php $dir=dirname(__FILE__); //找到当前脚本所在路径 require $dir."/PHPExcel/PHPExcel.php"; //引入文件 $objPHPExcel = new PHPExcel(); //实例化PHPExcel类,等同于在桌面上新建一个Excel表格 $objSheet = $objPHPExcel->getActiveSheet(); //得到当前活动sheet的操做对象 $objSheet->setTitle('demo'); //给当前活动sheet设置名称 /* 填充单行数据 * $objSheet->setCellValue("A1","姓名")->setCellValue("B1","分数"); //给当前活动sheet填充数据 * $objSheet->setCellValue("A2","张三")->setCellValue("B2","50"); */ //不推荐这个,PHPExcel是一个比较耗内存的操做,数据少还能够,数据大就不行了 $array=array{ array(), //插入空行,第一行为空,从第二行开始填充 array("","姓名","分数"), //插入空列,从第二列开始 array("","李四","60"), array("","王五","70") } $objSheet->fromArray($array); //直接加载数据块来填充数据 $objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel2007"); //按照指定格式生成excel格式 "Excel5" //即Excel2003 生成.xls, 或者"Excel2007" 生成.xlsx $objWriter->save($dir."/demo.xlsx"); ?>
dbconfig.php数组
<?php $phpexcel=array( 'host'=127.0.0.1; 'username'=>'root'; 'password'=>'', 'database'=>'phpexcel', 'charset'=>'utf8' ); ?>
<?php require dirname(__FILE__).'/dbconfig.php'; //引入配置文件 class db{ public $conn=null; public function __construct($config){ $this->conn=mysql_connect($config['host'],$config['username'], $config['password']) or die(mysql_error()); mysql_select_db($config['database'],$this->conn) or die(mysql_error()); //选择数据库 mysql_query('set names'.$config['charset']) or die(mysql_error()); //设定mysql编码 } /* **根据传入sql语句 查询mysql结果集 */ public function getResult($sql){ $resource=mysql_query($sql, $this->conn) or die(mysql_error()); //查询sql语句 $res=array(); while(($row=mysql_fetch_assoc($resource))!=false){ $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 $dir.'/db.php'; //引入mysql操做类文件 require $dir.'/PHPExcel/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=>$val){ $objSheet->setCellValue("A".$j,$val['username'])->setCellValue("B".$j,$val['score'])->setCellValue("C".$j,$val[class]."班"); //从第二行开始循环打印数据库里的数据 $j++; //必定要记住加这个,向下递增行数,不然一直在覆盖第二行 } } $objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5'); //生成excel文件 $objWriter->save($dir."/export_1.xls");//保存文件 ?>
<?php $dir=dirname(__FILE__); //查找当前脚本所在路径 require $dir.'/db.php'; //引入mysql操做类文件 require $dir.'/PHPExcel/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=>$val){ $objSheet->setCellValue("A".$j,$val['username'])->setCellValue("B".$j,$val['score'])->setCellValue("C".$j,$val[class]."班"); //从第二行开始循环打印数据库里的数据 $j++; //必定要记住加这个,向下递增行数,不然一直在覆盖第二行 } } $objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5'); //生成excel文件 browser_export('Excel5','browser_excel03.xls'); //输出到浏览器 $objWriter->save('php://output'); function browser_export($type, $filename){ if($type=='Excel5'){ header('Content-Type: application/vnd.ms-excel'); //告诉浏览器将要输出excel 2003文件 }else{ header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); //告诉浏览器输出excel 2007文件 } header('Content-Disposition: attachment;filename="'.$filename.'"'); //告诉浏览器将输出文件的名称 header('Cache-Control: max-age=0'); //禁止浏览器缓存 } ?>
read.php缓存
<?php header("Content-Type:text/html;charset=utf-8"); $dir=dirname(__FILE__); //找到当前脚本所在路径 require $dir."/PHPExcel/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); //加载文件(选择加载) //$objPHPExcel=PHPExcel_IOFactory::load($filename);//加载文件(所有加载,已经浪费了不少内存) $sheetCount=$objPHPExcel->getSheetCount();//获取excel文件里有多少个sheet /** * 所有读取 * * for($i=0;$i<$sheetCount;$i++){ * $data=$objPHPExcel->getSheet($i)->toArray(); //读取每一个sheet里的数据所有放入到数组中 * } **/ /** * 逐行读取: PHPExcel提供了一个迭代器,循环取迭代器里面的东西就行 */ foreach($objPHPExcel->getWorksheetIterator() as $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; ?>
总结:
PHPExcel
服务器
导出
- 普通列表 fromArray -
setCellValue - 按行按列一个一个地填充数据
- 样式控制
- 生成文件
- 浏览器 Excel5 和Excel07
- 服务器 放在服务器里面
- 图形列表app
导入
- 所有加载
- 部分加载
读取
- toArray
- 按列读取
启用缓存
默认 - 按cell占用PHP内存
cache_in_memory_serialized 序列化存放PHP内存(所占空间小了不少)
cache_in_memory_gzip 进一步压缩
cache_in_memory_disclSAM 存放于硬盘(耗时会很长)
cache_in_memory_phpTemp 存放于临时文件夹
cache_in_memcache 存放于memcache里,也是使用内存,速度快(最好)
若是要使用memcache,在开发者文档里复制过来:
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache; //选择memcache缓存 $cacheSettings = array( 'memcacheServer' => 'localhost', 'memcachePort' => 11211, 'cacheTime' => 600 ); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);