PHPExcel探索之旅---阶段一
类似于Java,php也有操作Excel的方法,其中需要下载PHPExcel插件,将其中的Classes文件夹改名为PHPExcel并提取到根文件夹外面,将两个文件夹一起放在所需项目中
使用PHPExcel插件需要先实例化一个PHPExcel对象 整个过程需要用到以下函数:
new PHPExcel() ----新建一个PHPExcel对象
createSheet() -----新建一个sheet表
setActiveSheetIndex() ---- 通过下标设置活动sheet表
getActiveSheet() ---- 得到当前为活动状态的sheet表,返回的是对象
setTitle() ---- 给当前活动sheet表设置名字
setCellValue("A1","填充内容") ---- 给单元格填充数据
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel2007") ----- 生成excel文件
$objWriter -> save($dir."/export_1.xlsx") ----- 保存到当前目录下面
下面是将数据库中user表中的数据提取出来填充到Excel中的代码
1 <?php 2 /*** 3 * mysql的配置文件 4 * */ 5 $phpexcel = array( 6 "host" => "localhost", 7 "username" => "root", 8 "password" => "", 9 "database" => "test", 10 "charset" => "utf8" 11 );
1 <?php 2 /** 3 * 创建一个类db用来连接数据库及定义对数据库的操作 4 * */ 5 require dirname(__FILE__).'/dbconfig.php';//引入配置文件 6 //创建一个db类 7 class db{ 8 public $conn = null; 9 10 public function __construct($config){//构造方法 实例化类时自动调用 11 $this -> conn = mysql_connect($config["host"],$config["username"],$config["password"]) or die(mysql_error()); 12 mysql_select_db($config["database"]) or die(mysql_error());//选择数据库 13 mysql_query("set names ".$config["charset"]) or die(mysql_error());//设定数据库编码 14 } 15 16 //根据传入sql语句 查询mysql结果集 =》mysql单例模式 17 public function getResult($sql){ 18 $resource = mysql_query($sql) or die(mysql_error());//查询sql语句 19 $res = array(); 20 while(($row = mysql_fetch_assoc($resource)) != false){//以行取出资源句柄里的信息 21 $res[] = $row; 22 } 23 return $res; 24 //var_dump($res)."<br>"; 25 } 26 27 //传入年纪数 导出每个年纪的学生数据 28 public function getDataByGrade($grade){ 29 $sql ="select username,score,class from user where grade=".$grade." order by score desc"; 30 //$sql="select username,score,class from user where grade=".$grade." order by score desc"; 31 $res = self::getResult($sql); 32 var_dump($res); 33 return $res; 34 } 35 36 }
1 <?php 2 /** 3 *用来导出数据表中的数据到Excel中的主要文件 4 * */ 5 $dir = dirname(__FILE__); 6 7 require $dir."/db.php"; 8 require $dir."/PHPExcel/PHPExcel.php"; 9 10 $db = new db($phpexcel);//实例化的db类 连接mysql数据库 11 $objPHPExcel = new PHPExcel();//新建一个PHPEXcel对象 12 13 for($i = 1;$i <= 3; $i ++){ 14 if($i > 1){ 15 $objPHPExcel -> createSheet(); 16 } 17 $objPHPExcel -> setActiveSheetIndex($i - 1);//下标从零开始 18 $objSheet = $objPHPExcel -> getActiveSheet();//设置新建的sheet为当前活动sheet 19 $objSheet -> setTitle($i.'年级'); 20 $data = $db -> getDataByGrade($i);//查询每个年级学生的信息 21 //var_dump($data)."<br>"; 22 23 24 //导出数据 25 $objSheet -> setCellValue("A1","姓名")-> setCellValue("B1","成绩")-> setCellValue("C1","班级"); 26 $j = 2; 27 28 foreach($data as $key => $val){ 29 var_dump($val); 30 $objSheet->setCellValue("A".$j,$val['username'])->setCellValue("B".$j,$val['score'])->setCellValue("C".$j,$val['class']."班"); 31 $j++; 32 } 33 34 35 36 } 37 38 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,"Excel2007");//生成excel文件 39 $objWriter -> save($dir."/export_1.xlsx");//保存到当前目录下面 40 41 42 43 44
出现的主要问题:
$res = array();
while(($row = mysql_fetch_assoc($resource)) != false){//以行取出资源句柄里的信息
$res[] = $row;
}
上面的代码的意思是将数据表中的每一条数据以关联数组的形式取出来并作为数组$res的一个原子,而数组$res包含的是整个数据表中的所有信息
所以输出时有:
foreach($data as $key => $val){
$objSheet->setCellValue("A".$j,$val['username'])->setCellValue("B".$j,$val['score'])->setCellValue("C".$j,$val['class']."班");
$j++;
}