php会员列表导出excel,PHPExcel简单列表导出

PHPExcel是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格。下面主要介绍的是:PHPExcel简单列表导出。

生成Excel表的思路对照

首先我们需要到官网上,下载PHPExcel的包,包里我们把classes单独提取出来,classes里面有一个文件使PHPExcel.php这个是我们主要用到的,在下面的例子中,我把classes文件夹重命名为了PHPExcel。下面这张图对比了我们平常创建一个excel需要做什么和我们用代码创建一个excel的相同的地方,我们应该看到他们非常相似:

phpexcel.png

生成Excel表基本代码1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24$dir = dirname(__FILE__);

//包含PHPExcel文件

require_once("./PHPExcel/PHPExcel.php");

//创建了一个表格

$phpExcelObj = new PHPExcel();

//获取当前活动sheet

$activeSheet = $phpExcelObj->getActiveSheet();

//var_dump($activeSheet);

$activeSheet->setTitle("demo");

//给当前的表格填充数据

$activeSheet->setCellValue("A1","姓名")->setCellValue("B1","分数");

$activeSheet->setCellValue("A2","Seven")->setCellValue("B2","75");

//按照指定格式生成excel文件

$objWriter = PHPExcel_IOFactory::createWriter($phpExcelObj,"Excel2007");

//保存文档

$objWriter->save($dir."/demo.xlsx");

?>

就可以在当前目录下生成一个demo.xlsx,里面的内容:

pex2.png

先前可以试着打印下$phpExcelObj对象,如果看到下面的可以说明引入成功:

pxc1.png

还有下面这样的一种方式,以数组来填充:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18$dir = dirname(__FILE__); //string 'D:wampwampwwwphpexcel' (length=25)

require_once("./PHPExcel/PHPExcel.php");

$phpExcelObj = new PHPExcel(); //创建了一个表格

$activeSheet = $phpExcelObj->getActiveSheet();

//var_dump($activeSheet);//获取当前活动sheet

$activeSheet->setTitle("demo");

//给当前的表格填充数据

$array = array(

array(),

array("","姓名","分数"),

array("","李四","60"),

array("","王五","90")

);

$activeSheet->fromArray($array);

$objWriter = PHPExcel_IOFactory::createWriter($phpExcelObj,"Excel2007");

$objWriter->save($dir."/demo1.xlsx");

?>

exc3.png

这种方法肯定和上面的比有优点,比如设置起来比较方便,但是也有不好的地方,比较耗内存。

把数据库的数据录入excel中

刚刚我们的是直接手动录入,这种情况在项目中是使用比较少的,下面这种我们把数据从数据库录入excel中是最常见的。比如我们在生成订单表的时候,生成excel对卖家来说会是经常需要的。

比如我们在数据库中有这样一张表:

pexc5.png

我们需要按照年级把成绩分出来,并得到下面的结果,如果我们手动录入肯定会很麻烦,看看下面的PHPExcel方法:

pec4.png

首先我们有一个数据库配置文件:config.php,在这里面要设置数据库,字符集等信息。1

2

3

4

5

6

7

8

9<?php

$config = array(

'host'=>'127.0.0.1',

'username'=>'root',

'password'=>'****',

'database'=>'test',

'charset'=>'utf8'

);

?>

然后我们需要一个db类,用于我们从数据库取出数据,我们命名为db.php1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27require_once('./config.php');

class{

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']) or die(mysql_error());

mysql_query("set names ".$config['charset']) or die(mysql_error());

}

public function getResult($sql){

$res = mysql_query($sql);

$arr = array();

while($row = mysql_fetch_assoc($res)){

$arr[] = $row;

}

return $arr;

}

public function getDataByGrade($grade){

$sql = "select * from student where grade = ".$grade." order by score desc";

$res = self::getResult($sql);

return $res;

}

}

?>

下面是我们的主文件,我们把上面的文件都包含进来,这里注意因为我们在db里已经require了config.php,所以这里不用再包含config.php了,或者我们用require_once也可以。1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27$dir = dirname(__FILE__);

require $dir."/db.php";

require $dir."/PHPExcel/PHPExcel.php";

$db = new db($config);

$objPHPExcel = new PHPExcel();

for ($i=1; $i <= 3; $i++) {

if($i>1){

$objPHPExcel->createSheet();

}

$objPHPExcel->setActiveSheetIndex($i-1);

$objSheet = $objPHPExcel->getActiveSheet();

$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['name'])->setCellValue("B".$j,$value['grade'])->setCellValue("C".$j,$value['name']);

$j++;

}

}

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');

$objWriter->save($dir."/export_1.xls");

?>

主要的思路就是我们按照先前我们的步骤新建表,创建sheet,这里不同的是,我们要把三个年级的放到不同的sheet里,所以不能只create一个sheet,要根据grade有多少个循环创建,并且把相应的数据放进去。

将excel输出到浏览器

我们也可以吧excel保存到浏览器,这个时候我们只用改动一点代码就行了,比如这里我们设置header头,告诉浏览器生成的类型。注意这里save方法发生了变化的。1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39$dir = dirname(__FILE__);

require $dir."/db.php";

require $dir."/PHPExcel/PHPExcel.php";

$db = new db($config);

$objPHPExcel = new PHPExcel();

for ($i=1; $i <= 3; $i++) {

if($i>1){

$objPHPExcel->createSheet();

}

$objPHPExcel->setActiveSheetIndex($i-1);

$objSheet = $objPHPExcel->getActiveSheet();

$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['name'])->setCellValue("B".$j,$value['grade'])->setCellValue("C".$j,$value['name']);

$j++;

}

}

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');

//$objWriter->save($dir."/export_1.xls");

browser_export("Excel5",'browser_export01.xls');

$objWriter->save("php://output");

function browser_export($type,$filename){

if($type=="Excel5"){

header('Content-Type: application/vnd.ms-excel');//告诉浏览器将要输出excel03文件

}else{

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器数据excel07文件

}

header('Content-Disposition: attachment;filename="'.$filename.'"');//告诉浏览器将输出文件的名称

header('Cache-Control: max-age=0');//禁止缓存

}

?>

如果不告诉浏览器名称的话,就会把当前文本的名称当成输出excel的名称。header就是告诉浏览器文件类型。必须有。

最后的结果,就是我一刷新就出来了下载这个:

pce7.png

总结

这个还有很多方法我没有写到,比如我们怎么样设置居中,怎么样添加线性表,怎么样导入Excel表,这个我会回头有时间再写一篇博客的。还有很多设置样式的,我们其实要做的就是调用它的接口就行。因为这样的东西我觉得不是经常用就会忘,所以做一次大概知道是什么思路和样子就行了,以后要用的时候再查一查文档,看看以前做的例子,应该能很快就想起来的,那些函数的调用也没有太大的必要记住。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值