本文实例讲述了PHP实现导出excel数据的类库用法。分享给大家供大家参考,具体如下:
今天一个项目要做一个PHP导出数据用excel保存,在网上找到一个本来是想用phpexcel的,后来发现太难了,就换了一个但导出的歌声是XML
类写的很简单,但很实用。只能简单的导出字符串和数字二种格式。
如果你有兴趣,你可以拿去扩充了,基本够用。
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
|
class Excel_XML
{
//定于私有变量,顶部标签
private $header = "<?xml version=\"1.0\" encoding=\"%s\"?\>\n<Workbook xmlns=\"urn:schemas-microsoft-com:
office:spreadsheet\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns:ss=\"urn:schemas-microsoft-com:
office:spreadsheet\ " xmlns:html=\"http://www.w3.org/TR/REC-html40\">" ;
//底部标签
private $footer = "</Workbook>" ;
//定于行数组
private $lines = array ();
//设置编码
private $sEncoding ;
//设置类型
private $bConvertTypes ;
//设置sheet名称
private $sWorksheetTitle ;
//构造函数
public function __construct(
$sEncoding = 'UTF-8' , $bConvertTypes = false, $sWorksheetTitle = 'Table1' )
{
$this ->bConvertTypes = $bConvertTypes ;
$this ->setEncoding( $sEncoding );
$this ->setWorksheetTitle( $sWorksheetTitle );
}
//设置编码,在构造函数里面默认的事UTF-8格式
public function setEncoding( $sEncoding )
{
$this ->sEncoding = $sEncoding ;
}
//设置excel的头
public function setWorksheetTitle ( $title )
{
$title = preg_replace ( "/[\\\|:|\/|\?|\*|\[|\]]/" , "" , $title );
$title = substr ( $title , 0, 31);
$this ->sWorksheetTitle = $title ;
}
//增加行函数(关键函数)
private function addRow ( $array )
{
$cells = "" ; //设置每个单元为空
foreach ( $array as $k => $v )
{
$type = 'String' ; //默认类型是字符串
if ( $this ->bConvertTypes === true && is_numeric ( $v )): //判断类型
{ $type = 'Number' ; }
$v = htmlentities( $v , ENT_COMPAT, $this ->sEncoding);
$cells .= "<Cell><Data ss:Type=\"$type\">" . $v . "</Data></Cell>\n" ;
}
$this ->lines[] = "<Row>\n" . $cells . "</Row>\n" ; //写入数组
}
//增加数组
public function addArray ( $array )
{
foreach ( $array as $k => $v )
{ $this ->addRow ( $v );}
}
//导出xml
public function generateXML ( $filename = 'excel-export' )
{
$filename = preg_replace( '/[^aA-zZ0-9\_\-]/' , '' , $filename );
header( "Content-Type: application/vnd.ms-excel; charset=" . $this ->sEncoding);
header( "Content-Disposition: inline; filename=\"" . $filename . ".xls\"" );
echo stripslashes (sprintf( $this ->header, $this ->sEncoding));
echo "\n<Worksheet ss:Name=\"" . $this ->sWorksheetTitle . "\">\n<Table>\n" ;
foreach ( $this ->lines as $line )
echo $line ;
echo "</Table>\n</Worksheet>\n" ;
echo $this ->footer;
}
}
|
原理很简单,就是把数据数组,读出来,再用XML的标签封上,在用php自带的header()函数告诉游览器,就可以了。
调用:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public function import()
{
$data = array (
1 => array ( '学校名称' , "队伍名称" )
);
foreach ( $this ->team as $key => $value )
{
array_push ( $data , array ( $key , $value ));
}
$xls = new Excel_XML( 'UTF-8' , false, 'My Test Sheet' ); //实例化函数
$xls ->addArray( $data );
$xls ->generateXML( 'school' ); //导出并设置名称
}
|
上面是的写一个导出方式。在游览器运行就已经导出数组$this->team 里面的键和值了。
希望本文所述对大家PHP程序设计有所帮助。