PHPExcel学习笔记

      以下学习笔记均是从慕课网的视频里整理得来,仅作自己学习记录和交流之用,课程链接为  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;
?>

    打开浏览器输入链接,输出内容如下:



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值