之前放上来的那个读取Excel类,在不明的情况会出现死循环,现在这个不会了,而且功能更强大。当然,功能强大也代表着更难使用。。。
<? class ReadExcel { var $excfile = ''; function ReadExcel($readfile) { $this->excfile = $readfile; } function read() { $reArr = array(); require_once 'excelparser.php'; $exc = new ExcelFileParser(); $res = $exc->ParseFromFile($this->excfile); for($she = 0;$she < count($exc->worksheet['name']);$she++) { for( $col=0;$col<$exc->worksheet['data'][0]['max_col'];$col++ ) { for($row=0;$row<$exc->worksheet['data'][0]['max_row'];$row++) { $data = $exc->worksheet['data'][0]['cell'][$row][$col]; $ind = $data['data'];
switch ($data['type']) { // string case 0: $ind = $data['data']; if( $exc->sst['unicode'][$ind] ) { $s = $this->uc2html($exc->sst['data'][$ind]); } else { $s = $exc->sst['data'][$ind]; } if( strlen(trim($s))==0 ) $reArr[$she][$col][$row] = ""; else $reArr[$she][$col][$row] = $s; break; // integer number case 1: $s = $data['data']; $$reArr[$she][$col][$row] = $s; break; // float number case 2: $s = $data['data']; $reArr[$she][$col][$row] = $s; break; // date case 3: $s = str_replace ( " 00:00:00", "", gmdate("d-m-Y H:i:s",$exc->xls2tstamp($data[data])) ); $reArr[$she][$col][$row] = $s; break; default: break; } } } } return $reArr; } function uc2html($str) {
$ret = ''; for( $i=0; $i<strlen($str)/2; $i++ ) { $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);//一个汉字 if($charcode > 128) { //convert to char $src_str_hex = dechex($charcode); $char1 = substr($src_str_hex,0,2); $char2 = substr($src_str_hex,2,2); $char=chr(hexdec($char1)).chr(hexdec($char2));//转成unicode字符 $s=$char; $gbk = iconv("UTF-16","GBK",$s); $ret.=$gbk; }else{ $ret.=$str[$i*2]; } } return $ret; } } $a = new ReadExcel("DESCSN2006031301.xls"); $tmp = $a->read(); print_r($tmp); ?> |
类库下载地址:
http://down.chinaz.com/s/9459.asp