本文实例讲述了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程序设计有所帮助。