亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? excelparser.php

?? 修改后的PHPExcelParser4。 修改內容: 1
?? PHP
?? 第 1 頁 / 共 3 頁
字號:
		 	$sdc_start_block = $dir->getLong( $root_entry_index * 0x80 + 0x74 );
		 	$small_data_chain = $this->get_blocks_chain($sdc_start_block);
		 	$this->max_sblocks = count($small_data_chain) * 8;
		 	
		 	$schain = $this->get_blocks_chain($small_block);		 	
		 	for( $i = 0; $i < count( $schain ); $i++ ) {
		 		
				$sfatbuf = $dp->get( $schain[$i] * 0x200, 0x200 );
				$sfat = new DataProvider( $sfatbuf, DP_STRING_SOURCE );
				
				//$this->dbglog->dump( strlen($sfatbuf), "strlen(\$sftabuf)");
				//$this->dbglog->dump( $sfat, "\$sfat");
				
		  		if( $sfat->getSize() < 0x200 ) {
/*DBG*/    	 		$this->dbglog->debug("parse_workbook() function found (strlen($sfat) < 0x200)  returns 6");
		     		return 6;
 	      		}
 	      		
		  		for( $j=0; $j<0x80; $j++ )
		   			$this->sfat[] = $sfat->getLong( $j * 4 );
		   		
		   		$sfat->close();
		   		unset( $sfatbuf, $sfat );
		 	}
		 	unset( $schain );

		 	$sfcbuf = $dp->ReadFromFat( $small_data_chain );
		  	$sdp = new DataProvider( $sfcbuf, DP_STRING_SOURCE );
		  	unset( $sfcbuf, $small_data_chain );
		}

		$workbook_index = $this->find_stream( $dir, 'Workbook' );
		if( $workbook_index<0 ) {
			$workbook_index = $this->find_stream( $dir, 'Book' );
			if( $workbook_index<0 ){
/*DBG*/    	    $this->dbglog->debug("parse_workbook() function workbook index not found returns 7");
				return 7;
			}
		}

		$workbook_start_block = $dir->getLong( $workbook_index * 0x80 + 0x74 );
		$workbook_length = $dir->getLong( $workbook_index * 0x80 + 0x78 );
		$wb = '';

		if( $workbook_length > 0 ) {
			if( $workbook_length >= 0x1000 ) {
				$chain = $this->get_blocks_chain($workbook_start_block);
				$wb = $dp->ReadFromFat( $chain );
		 	} else {
				$chain = $this->get_blocks_chain($workbook_start_block,true);
				$wb = $sdp->ReadFromFat( $chain, 0x40 );
				unset( $sdp );
		 	}
			$wb = substr($wb,0,$workbook_length);
			if( strlen($wb) != $workbook_length )
				return 6;
			unset( $chain );
		}
		
		// Unset fat arrays
		unset( $this->fat, $this->sfat );

		if( strlen($wb) <= 0 ) {
/*DBG*/    $this->dbglog->debug("parse_workbook() function workbook found (strlen($wb) <= 0) returns 7");
		   return 7;
		}
		if( strlen($wb) <  4 ) {
/*DBG*/    $this->dbglog->debug("parse_workbook() function workbook found (strlen($wb) < 4) returns 6");
		    return 6;
		}
			
		// parse workbook header
		if( strlen($wb) < 256*ord($wb[3])+ord($wb[2]) ){
/*DBG*/ 	$this->dbglog->debug("parse_workbook() function workbook found (strlen($wb) < 256*ord($wb[3])+ord($wb[2])) < 4) returns 6");
			return 6;
		}

		if( ord($wb[0]) != 0x09 ){
/*DBG*/ 	$this->dbglog->debug("parse_workbook() function workbook found (ord($wb[0]) != 0x09) returns 6");
			return 6;
		}
		
		$vers = ord($wb[1]);
		if( ($vers!=0) && ($vers!=2) && ($vers!=4) && ($vers!=8) ){
			return 8;
        }
		if( $vers!=8 )
		 	$biff_ver = ($ver+4)/2;
		else {
					
			if (strlen($wb) < 12) return 6;
		 	switch (ord($wb[4])+256*ord($wb[5]) )
		 	{
			case 0x0500:
				if( ord($wb[0x0a])+256*ord($wb[0x0b]) < 1994 )
					$biff_ver = 5;
				else {
					switch(ord( $wb[8])+256*ord($wb[9]) ) {
					 case 2412:
					 case 3218:
					 case 3321:
						$biff_ver = 5;
						break;
					 default:
						$biff_ver = 7;
						break;
					}
				}
				break;
			case 0x0600:
				$biff_ver = 8;
				break;
			default:
				return 8;
		 	}
		}

		if( $biff_ver < 5 ) return 8;

		$ptr = 0;
		$this->worksheet['offset'] = array();
		$this->worksheet['options'] = array();
		$this->worksheet['unicode'] = array();
		$this->worksheet['name'] = array();
		$this->worksheet['data'] = array();
		$this->format = $this->populateFormat();
		$this->fonts = array();
		$this->fonts[0] = ExcelFont::basicFontRecord();

		$this->xf = array();
		$this->xf['format'] = array();
		$this->xf['font'] = array();
		$this->xf['type_prot'] = array();
		$this->xf['alignment'] = array();
		$this->xf['decoration'] = array();

		$xf_cnt=0;

		$this->sst['unicode'] = array();
		$this->sst['data'] = array();

		$opcode = 0;
		$sst_defined = false;
		$wblen = strlen($wb);

		while( (ord($wb[$ptr])!=0x0a) && ($ptr<$wblen) )
		{
			$oc = ord($wb[$ptr])+256*ord($wb[$ptr+1]);
			if( $oc != 0x3c )
				$opcode = $oc;
		 	
		 	switch ($opcode)
		 	{
		  	
		  	case 0x0085:
		  		$ofs = str2long(substr($wb,$ptr+4,4));
				$this->worksheet['offset'][] = $ofs;
				$this->worksheet['options'][] = ord($wb[$ptr+8])+256*ord($wb[$ptr+9]);
				if( $biff_ver==8 ) {
					$len = ord($wb[$ptr+10]);
					if( (ord($wb[$ptr+11]) & 1) > 0 ) {
				 		$this->worksheet['unicode'][] = true;
						$len = $len*2;
				 	} else {
				 		$this->worksheet['unicode'][] = false;
				 	}
				 	$this->worksheet['name'][] = substr($wb,$ptr+12,$len);
				} else {
					$this->worksheet['unicode'][] = false;
					$len = ord($wb[$ptr+10]);
					$this->worksheet['name'][] = substr($wb,$ptr+11,$len);
				}
	
				$pws = $this->parse_worksheet(substr($wb,$ofs));
				if( is_array($pws) )
					$this->worksheet['data'][] = $pws;
				else
					return $pws;
				break;

		 	// Format
		  	case 0x041e:
	 		  	$fidx = ord($wb[$ptr+4])+256*ord($wb[$ptr+5]);
			  	if($fidx<0x31 ||$fidx==0x31 )
			  		break;
			  	elseif($biff_ver>7)
			  	  	$this->format[$fidx] = $this->getUnicodeString($wb,$ptr+6);
//			  	  	echo $wb."---".$this->format[$fidx]."*****<br>";

		 	// FONT 0x31
		   	case EXCEL_FONT_RID:
                $rec = ExcelFont::getFontRecord($wb,$ptr+4);
                $this->fonts[count($this->fonts)] = $rec;
/*echo str_replace("\n","<br>\n",ExcelFont::toString($rec,count($this->fonts)-1));
echo "FontRecord<br>" */;
		        break;

		 	// XF
		  	case 0x00e0:
			  	$this->xf['font'][$xf_cnt] = ord($wb[$ptr+4])+256*ord($wb[$ptr+5]);
			  	$this->xf['format'][$xf_cnt] = ord($wb[$ptr+6])+256*ord($wb[$ptr+7]);
			  	$this->xf['type'][$xf_cnt]  = "1";
			  	$this->xf['bitmask'][$xf_cnt] = "1";
			  	$xf_cnt++;
		        break;

		  	// SST
		  	case 0x00fc:
				if( $biff_ver < 8 ) break;

				$sbuflen = ord($wb[$ptr+2]) + 256*ord($wb[$ptr+3]);

				if( $oc != 0x3c ) {
			 		if( $sst_defined ) return 6;
					$snum = str2long(substr($wb,$ptr+8,4));
					$sptr = $ptr+12;
					$sst_defined = true;
				} else {
			 		if( $rslen > $slen ) {
						$sptr = $ptr+4;
						$rslen -= $slen;
						$slen = $rslen;

						if( (ord($wb[$sptr]) & 1) > 0 ) {
				 			if( $char_bytes == 1 ) {
				  				$sstr = '';
								for( $i=0; $i<strlen($str); $i++ )
									$sstr .= $str[$i].chr(0);
								$str = $sstr;
								$char_bytes=2;
				 			}
				 			$schar_bytes = 2;
						} else {
				 			$schar_bytes = 1;
						}

						if( $sptr+$slen*$schar_bytes > $ptr+4+$sbuflen )
							$slen = ($ptr+$sbuflen-$sptr+3)/$schar_bytes;

						$sstr = substr($wb,$sptr+1,$slen*$schar_bytes);

						if( ($char_bytes == 2) && ($schar_bytes == 1) )
						{
							$sstr2 = '';
							for( $i=0; $i<strlen($sstr); $i++ )
								$sstr2 .= $sstr[$i].chr(0);
							$sstr = $sstr2;
						}
						$str .= $sstr;

						$sptr += $slen*$schar_bytes+1+4*$rt+$fesz;
					 	if( $slen < $rslen ) {
							if( ($sptr >= strlen($wb)) ||
							    ($sptr < $ptr+4+$sbuflen) ||
							    (ord($wb[$sptr]) != 0x3c) )
							{
							    return 6;
							}
							break;
					 	} else {
							if( $char_bytes == 2 ) {
								$this->sst['unicode'][] = true;
							} else {
								$this->sst['unicode'][] = false;
							}
							$this->sst['data'][] = $str;
							$snum--;
					 	}
				 	} else {
						$sptr = $ptr+4;
						if( $sptr > $ptr ) $sptr += 4*$rt+$fesz;
				 	}
				}

				while(  ($sptr < $ptr+4+$sbuflen) &&
					($sptr < strlen($wb)) &&
					($snum > 0) )
				{
					 $rslen = ord($wb[$sptr])+256*ord($wb[$sptr+1]);
					 $slen = $rslen;

					 if( (ord($wb[$sptr+2]) & 1) > 0 ) {
						$char_bytes = 2;
					 } else {
						$char_bytes = 1;
					 }

					 $rt = 0;
					 $fesz = 0;
					 switch (ord($wb[$sptr+2]) & 0x0c) {
					  // Rich-Text with Far-East
					  case 0x0c:
						$rt = ord($wb[$sptr+3])+256*(ord($wb[$sptr+4]));
						$fesz = str2long(substr($wb,$sptr+5,4));
						if( $sptr+9+$slen*$char_bytes > $ptr+4+$sbuflen )
							$slen = ($ptr+$sbuflen-$sptr-5)/$char_bytes;
						$str = substr($wb,$sptr+9,$slen*$char_bytes);
						$sptr += $slen*$char_bytes+9;
						break;
		
					  // Rich-Text
					  case 8:
						$rt = ord($wb[$sptr+3])+256*(ord($wb[$sptr+4]));
						if( $sptr+5+$slen*$char_bytes > $ptr+4+$sbuflen )
							$slen = ($ptr+$sbuflen-$sptr-1)/$char_bytes;
						$str = substr($wb,$sptr+5,$slen*$char_bytes);
						$sptr += $slen*$char_bytes+5;
						break;
		
					  // Far-East
					  case 4:
						$fesz = str2long(substr($wb,$sptr+3,4));
						if( $sptr+7+$slen*$char_bytes > $ptr+4+$sbuflen )
							$slen = ($ptr+$sbuflen-$sptr-3)/$char_bytes;
						$str = substr($wb,$sptr+7,$slen*$char_bytes);
						$sptr += $slen*$char_bytes+7;
						break;
		
					  // Compressed or uncompressed unicode
					  case 0:
						if( $sptr+3+$slen*$char_bytes > $ptr+4+$sbuflen )
							$slen = ($ptr+$sbuflen-$sptr+1)/$char_bytes;
					 	$str = substr($wb,$sptr+3,$slen*$char_bytes);
					 	$sptr += $slen*$char_bytes+3;
						break;
					 }

					 if( $slen < $rslen ) {
						if( ($sptr >= strlen($wb)) ||
						    ($sptr < $ptr+4+$sbuflen) ||
						    (ord($wb[$sptr]) != 0x3c) ) return 6;
					 } else {
						if( $char_bytes == 2 ) {
							$this->sst['unicode'][] = true;
						} else {
							$this->sst['unicode'][] = false;
						}
						$sptr += 4*$rt+$fesz;
						$this->sst['data'][] = $str;
					 	$snum--;
					 }
				} // switch
				break;
		 	} // switch
			
			// !!! Optimization:
			//  $this->wsb[] = substr($wb,$ptr,4+256*ord($wb[$ptr+3])+ord($wb[$ptr+2]));
			
			$ptr += 4+256*ord($wb[$ptr+3])+ord($wb[$ptr+2]);
		} // while

		// !!! Optimization:
		//  $this->workbook = $wb;
		$this->biff_version = $biff_ver;
/*DBG*/ $this->dbglog->debug("parse_workbook() function returns 0");
		return 0;
	}
/**
 * ParseFromString
 *
 * 		This function is not optimized for memory usage, but the script takes less times
 *		to be completely executed and to parse the selected data. Use when parsing speed
 *		is critical (PHP memory limit can be exceed for huge files and script will terminate!).		
 *
 * IN:
 *	string contents - File contents
 *	string filename - File name of an existing Excel file.
 *
 * @return int
 *	0 - success
 *	1 - can't open file
 *	2 - file too small to be an Excel file
 *	3 - error reading header
 *	4 - error reading file
 *	5 - This is not an Excel file or file stored in < Excel 5.0
 *	6 - file corrupted
 *	7 - data not found
 *	8 - Unsupported file version
 *
 * @param string
 * 
 */
	function ParseFromString( $contents )
	{
		$this->dbglog->info("ParseFromString() enter.");
		$this->dp = new DataProvider( $contents, DP_STRING_SOURCE );
		return $this->InitParser();
	}

/**
 * Parse Excel file
 *
 *	This function is optimized for memory usage, but the script takes more times
 *	to be completely executed and to parse the selected data. Use with large files.
 * @param string $filename file name
 */
	function ParseFromFile( $filename )
	{
		$this->dbglog->info("ParseFromFile() enter.");
		$this->dp = new DataProvider( $filename, DP_FILE_SOURCE );
		return $this->InitParser();
	}

/**
 *
 * @return mixed
 */
	function InitParser()
	{
		$this->dbglog->info("InitParser() enter.");
		if( !$this->dp->isValid() )
		{
			$this->dbglog->error("InitParser() Failed to open file.");
			$this->dbglog->error("InitParser() function returns 1");
			return 1;
		}
		if( $this->dp->getSize() <= 0x200 )
		{
			$this->dbglog->error("InitParser() File too small to be an Excel file.");
			$this->dbglog->error("InitParser() function returns 2");
			return 2;
		}

		$this->max_blocks = $this->dp->getBlocks();
		
		// read file header
		$hdrbuf = $this->dp->get( 0, 0x200 );
		if( strlen( $hdrbuf ) < 0x200 )
		{
			$this->dbglog->error("InitParser() Error reading header.");
			$this->dbglog->error("InitParser() function returns 3");
			return 3;
		}
	
		// check file header
		$header_sig = array(0xd0,0xcf,0x11,0xe0,0xa1,0xb1,0x1a,0xe1);
		for( $i = 0; $i < count($header_sig); $i++ )
			if( $header_sig[$i] != ord( $hdrbuf[$i] ) ){
/*DBG*/    	    $this->dbglog->error("InitParser() function founds invalid header");
/*DBG*/    	    $this->dbglog->error("InitParser() function returns 5");
				return 5;
            }
			
		$f_header = new DataProvider( $hdrbuf, DP_STRING_SOURCE );
		unset( $hdrbuf, $header_sig, $i );

		$this->dp->_baseOfs = 0x200;
		$rc = $this->parse_workbook($f_header, $this->dp);
		unset( $f_header );
		unset( $this->dp, $this->max_blocks, $this->max_sblocks );
		
		return $rc;
	}
}

/**
 * Make 32-bit integer from dump
 *
 * @param mixed
 * @return int 
 */
	function str2long($str)
	{
		return ord($str[0]) | ((ord($str[1])) << 8) | ((ord($str[2])) << 16) | ((ord($str[3])) << 24);
	}
?>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天av天天翘天天综合网| 99精品久久免费看蜜臀剧情介绍| 丁香啪啪综合成人亚洲小说 | 国产99久久久国产精品| 精品视频免费在线| 国产精品久久久久久久久久免费看 | 亚洲精品国产视频| 精品在线播放午夜| 欧美色综合影院| 中文字幕一区二区三区在线不卡| 久久99日本精品| 欧美美女视频在线观看| 亚洲天堂2016| 成人av中文字幕| 欧美经典一区二区| 国产自产高清不卡| 日韩视频不卡中文| 午夜电影一区二区三区| 欧美日韩国产综合视频在线观看| 国产精品国产三级国产有无不卡| 国产精品996| 久久久久亚洲综合| 久久爱www久久做| 欧美一级日韩一级| 视频在线观看一区二区三区| 欧美日韩色一区| 一区二区三区视频在线看| www.一区二区| 日韩久久一区二区| 91视视频在线观看入口直接观看www | 国产不卡视频一区| 欧美激情在线一区二区三区| 高潮精品一区videoshd| 国产欧美日产一区| 成人久久久精品乱码一区二区三区| 久久久久久久久久看片| 懂色av一区二区在线播放| 国产欧美一区二区三区鸳鸯浴| 国产精品亚洲成人| 国产精品网站在线播放| www.在线成人| 亚洲成人综合视频| 日韩一级免费观看| 国产精品白丝av| 日韩毛片一二三区| 欧美日韩成人高清| 久久99国产精品免费| 久久免费午夜影院| 一本一道久久a久久精品| 亚洲一二三区在线观看| 欧美一区二区三区视频| 激情五月婷婷综合网| 亚洲精品一线二线三线| 成人av网站免费观看| 亚洲国产综合视频在线观看| 欧美日韩一区精品| 国产成人午夜99999| 亚洲精品欧美专区| 日韩一区二区三区四区| 成人免费视频一区| 亚洲成a人片综合在线| 欧美草草影院在线视频| 成人午夜视频在线| 亚洲福利电影网| 国产三级一区二区三区| 欧美午夜电影在线播放| 国模套图日韩精品一区二区| 亚洲美女在线国产| 精品成a人在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 性感美女久久精品| 国产日韩精品视频一区| 欧美军同video69gay| 成人午夜精品在线| 青青草一区二区三区| 国产精品久久久久久户外露出| 欧美精品高清视频| 91香蕉视频mp4| 国产一区二区三区久久久| 一区二区三区日韩在线观看| 久久嫩草精品久久久精品| 欧美日韩国产a| av高清久久久| 国产精品99久久久久久久女警| 丁香婷婷深情五月亚洲| 亚洲动漫第一页| 亚洲视频 欧洲视频| 久久―日本道色综合久久| 欧美日韩一级片网站| 成人动漫精品一区二区| 精品综合久久久久久8888| 亚洲电影一区二区三区| 亚洲免费观看高清完整版在线| 亚洲国产成人午夜在线一区| 欧美成人午夜电影| 91精品国产综合久久国产大片| 色天天综合色天天久久| 99久久婷婷国产综合精品电影 | av在线不卡免费看| 国产美女在线观看一区| 麻豆精品在线观看| 日本亚洲天堂网| 丝袜美腿亚洲一区二区图片| 亚洲成人av资源| 亚洲国产综合在线| 亚洲动漫第一页| 亚欧色一区w666天堂| 亚洲成在人线免费| 午夜久久久久久久久久一区二区| 亚洲一区二区高清| 一区二区三区视频在线看| 一区二区三区91| 亚洲一区免费观看| 亚洲自拍偷拍麻豆| 日日摸夜夜添夜夜添亚洲女人| 亚洲不卡在线观看| 午夜精品一区二区三区电影天堂| 亚洲成人tv网| 免费国产亚洲视频| 久久精品国产亚洲高清剧情介绍| 麻豆国产欧美一区二区三区| 美女网站在线免费欧美精品| 久久av老司机精品网站导航| 国产尤物一区二区| 成人国产精品免费观看动漫| a美女胸又www黄视频久久| 91麻豆自制传媒国产之光| 欧洲视频一区二区| 在线播放91灌醉迷j高跟美女| 欧美一区二区三区免费观看视频| 日韩精品一区在线| 日本一区二区三区四区| 亚洲欧美日韩国产成人精品影院| 亚洲一区二区美女| 麻豆91在线观看| 成人动漫在线一区| 欧美日本一区二区三区四区| 精品乱码亚洲一区二区不卡| 欧美激情在线一区二区| 亚洲国产一区二区三区 | 久久综合狠狠综合久久综合88 | 亚洲精品第一国产综合野| 亚洲h在线观看| 国产酒店精品激情| 色狠狠综合天天综合综合| 中文字幕av在线一区二区三区| 亚洲视频一区在线| 蜜臀av性久久久久蜜臀aⅴ| hitomi一区二区三区精品| 欧美日韩在线电影| 国产三级久久久| 亚洲成人精品在线观看| 国产精品亚洲一区二区三区在线| 色噜噜偷拍精品综合在线| 欧美一区二区视频在线观看2022| 中文幕一区二区三区久久蜜桃| 亚洲一区二区视频| 国产69精品久久久久777| 欧美精品日韩一本| 亚洲欧洲精品一区二区三区不卡| 日韩专区在线视频| 色偷偷久久人人79超碰人人澡| www久久精品| 婷婷久久综合九色综合绿巨人| 丁香婷婷综合色啪| 欧美大肚乱孕交hd孕妇| 一区二区三区加勒比av| 国产成人在线观看| 日韩欧美黄色影院| 亚洲成人三级小说| zzijzzij亚洲日本少妇熟睡| 久久人人超碰精品| 美女尤物国产一区| 欧美精品在线一区二区| 亚洲视频狠狠干| 岛国精品在线播放| 久久人人超碰精品| 日本视频在线一区| 欧美唯美清纯偷拍| 一区二区三区四区在线播放| 成人avav影音| 国产日韩欧美一区二区三区综合| 三级不卡在线观看| 在线观看日韩精品| 一区二区三国产精华液| 91视频一区二区三区| 中文字幕在线一区| 成人丝袜高跟foot| 国产精品日韩成人| 成人午夜精品一区二区三区| 欧美国产精品久久| 国产aⅴ综合色| 日本一区二区三区国色天香| 国产成人综合网| 中文字幕av在线一区二区三区| 国产91富婆露脸刺激对白| 日本一区二区三区久久久久久久久不 | 欧美日韩精品是欧美日韩精品| 一区二区在线观看视频在线观看| 99国产精品久久久久久久久久|