使用PHPExcel生成Excel文件实例

使用PHPExcel类生成Excel文件十分方便,功能也比较齐全,这是我研究的一点成果,在此记录下来和大家分享:

ChangeArrayToExcel.php文件将PHPExcel再封装到ChangeArrayToExcel类中
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
require_once 'PHPExcel/PHPExcel.php';
require_once 'PHPExcel/PHPExcel/Writer/Excel5.php';
require_once 'PHPExcel/PHPExcel/Writer/Excel2007.php';
class ChangeArrayToExcel{
 
private $excelName;   //xls文件名,包括生成路径
 
public function __construct($name = '/public/export/Excel/excel.xls')
{
    if($name !="")
    {
          $this->excelName = $name;
     }
}
/*通过PHPExcel类生成Excel文件
*@param $data 包含excel文件内容的数组
* @param $txArr 包含excel表头信息(中文)  例如array('编号',"姓名")
* @param $txArrEn excel表头信息(英文) 例如array('id','username')
* @param $excelVersion 生成excel文件的版本  可选值为other,2007
* @param $width 单元格宽度,如果设置为‘auto’ 表示自适应宽度,也可是具体的数字,用来设置具体的单元格宽度
* @renturn excel文件的绝对路径
* **/
public function getExcel($data,$txArr,$txArrEn,$excelVersion = "other",$width="auto")
{
$excelObj = new PHPExcel();
$excelObj->setActiveSheetIndex(0);
$objActSheet = $excelObj->getActiveSheet();
if(count($txArr) != count($txArrEn) && count($txArrEn) != count($data['0']) && !empty($data))
{
echo "表头数组错误,请仔细检查!";
exit();
}
/*确定表头宽度,将表头内容添加到excel文件里*/
foreach($txArr as $key =>$value)
{
$objActSheet->setCellValue($this->numToEn($key)."1",$value);
/*设置对齐方式*/
$objActSheet->getStyle($this->numToEn($key)."1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
/*设置字体加粗*/
$objActSheet->getStyle($this->numToEn($key)."1")->getFont()->setBold(true);
$width == "auto"? $objActSheet->getColumnDimension($this->numToEn($key))->getAutoSize(true): $objActSheet->getColumnDimension($this->numToEn($key))->setWidth($width);
}
/*将数据添加到excel里*/
foreach($data as $key=>$value)
{
foreach($txArrEn as $k => $val)
{
$objActSheet->getStyle($this->numToEn($k).($key+2))->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
$objActSheet->setCellValue($this->numToEn($k).($key+2)," ".$value[$val]);  //在写入Excels单元格的内容之前加一个空格,防止长数字被转化成科学计数法
$objActSheet->getStyle($this->numToEn($k).($key+2))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}
}
/*判断生成excel文件版本*/
$objWriter = "";
if($excelVersion == "other")
{
$objWriter = new PHPExcel_Writer_Excel5($excelObj);
}
if($excelVersion == "2007")
{
$objWriter = new PHPExcel_Writer_Excel2007($excelObj);
}
$objWriter->save($this->excelName);
return $this->excelName;
}
/**
根据给定的数字生成至多两位对应EXCEL文件列的字母
*/
private function numToEn($num)
{
$asc = 0;
$en = "";
$num =(int)$num+1;
if($num<26)                      //判断指定的数字是否需要用两个字母表示
{
if((int)$num<10)
{
$asc = ord($num);
$en =chr($asc+16);
}
else
{
$num_g = substr($num,1,1);
$num_s = substr($num,0,1);
$asc = ord($num_g);
$en =chr($asc+16+10*$num_s);
}
}
else
{
$num_complementation = floor($num/26);
$en_q = $this->numToEn($num_complementation);
$en_h = $num%26 != 0 ? $this->numToEn($num-$num_complementation*26):"A";
$en = $en_q.$en_h;
}
return $en;
}
}
?>
在使用的时候,调用getExcel方法,并传入相应的参数即可,例如:
require_once 'ChangeArrayToExcel.php';   //配置ChangeArrayToExcel.php 所在路径
$excel = new ChangeArrayToExcel('/excel/EX1.xls');
$data = array(
'0'=>array('id'=>'1','username'=>'小明'),
'1' =>array('id'=>'2','username'=>'小红')
);
$enTable = array('id','username');
$cnTable=array('编号','用户名');
$excel-> getExcel($data,$cnTable,$enTable,'other',20);
由 晓狼 发表于 2011-05-10 7 评论
标签 : ,

7 个评论

评论
十二 1, 2011
10:00
#1 bobo :

谢谢你,我刚用到了,真是很方便,为我节省了很多时间.再次谢谢!

作者 十二 7, 2011
11:41
#2 晓狼 :

呵呵,不客气,有什么不好的还要请你多多指正呢,呵呵

三 5, 2012
10:48
#3 Somebody :

thks for share. 小明后面的逗号有个错误

五 15, 2012
17:04
#4 peng98jie :

我有点问题想问问你呢

作者 七 11, 2012
11:09
#5 晓狼 :

恩,请说。

作者 七 13, 2012
17:40
#6 晓狼 :

php无法直接将文件生成到本地,我想你可以在生成好excel文件之后,用header函数跳转来下载生成好的文件,例如:
例如你的文件在项目的目录结构是 “项目根目录/excel.xls”,代码可以为:
header(‘Location: http://xxx.xxx/excel.xls‘);
这样应该就能下载excel了。

作者 七 13, 2012
18:00
#7 晓狼 :

Thank you for your correct!

对不起,评论已关闭.

上一篇文章
«
下一篇文章
»
 友情链接:web集结号     京ICP备11006177号