1. index.php
" id="Codes" OnClick="this.src='inc/code.php?t='+new Date();"/>
说明:【+验证码】都输入正确才显示相应结果。
请认真输入你的
认真输入4数字验证码
&#39;; echo $shujus; echo &#39;&#39;; } $data = new Spreadsheet_Excel_Reader(); $data->setOutputEncoding(&#39;UTF-8&#39;); $data->read($files); for ($i = 1; $i <= $data->sheets[0][&#39;numRows&#39;]; $i++) { if($i=="1"){ $iaa=""; for ($j = 1; $j <= $data->sheets[0][&#39;numCols&#39;]; $j++) { $taba = &#39;&#39;.$data->sheets[0][&#39;cells&#39;][$i][$j].&#39;&#39;; $io++; if($taba==$tiaojian1){ $iaa=$io-1; } } }else{ $Excelx=$data->sheets[0][&#39;cells&#39;][$i][$iaa+1]; if("_".$shuru1=="_".$Excelx){ $iae++; echo &#39;
&#39;.$tabe.&#39; | &#39;; echo &#39;&#39;.$tabu.&#39; | &#39;; echo &#39;
没有查询到 $shujus 中 $shuru1 相关信息哦 | "; echo &#39;
© 技术支持
2. conn.php
&#39;; //traverse($sub_dir); } else { //如果是文件,直接输出 // echo &#39;File in Directory &#39; . $path . &#39;: &#39; . $file . &#39;
&#39;; $file = str_replace($filephp,"",$file); //文件名除了后缀,不要包含.php echo &#39;&#39;; } } } function fileline1($path = &#39;.&#39;) { $data = new Spreadsheet_Excel_Reader(); $data->setOutputEncoding(&#39;UTF-8&#39;); $data->read($path); for ($j = 1; $j <= $data->sheets[0][&#39;numCols&#39;]; $j++) { $str .= &#39;&#39;.$data->sheets[0][&#39;cells&#39;][&#39;1&#39;][$j].&#39;&#39;; } $str = iconv(&#39;UTF-8&#39;, &#39;GB2312&#39;, $str); return $str; } function get_file_line( $file_name, $line ){ $n = 0; $handle = fopen($file_name,&#39;r&#39;); if ($handle) { while (!feof($handle)) { ++$n; $out = fgets($handle, 4096); if($line==$n) break; } fclose($handle); } if( $line==$n) return $out; return false; } ?>
3. excel.php
=4294967294) { $value=-2; } return $value; } function gmgetdate($ts = null){ $k = array(&#39;seconds&#39;,&#39;minutes&#39;,&#39;hours&#39;,&#39;mday&#39;,&#39;wday&#39;,&#39;mon&#39;,&#39;year&#39;,&#39;yday&#39;,&#39;weekday&#39;,&#39;month&#39;,0); return(array_comb($k,split(":",gmdate(&#39;s:i:G:j:w:n:Y:z:l:F:U&#39;,is_null($ts)?time():$ts)))); } // Added for PHP4 compatibility function array_comb($array1, $array2) { $out = array(); foreach ($array1 as $key => $value) { $out[$value] = $array2[$key]; } return $out; } function v($data,$pos) { return ord($data[$pos]) | ord($data[$pos+1])<<8; } class OLERead { var $data = &#39;&#39;; function OLERead(){ } function read($sFileName){ // check if file exist and is readable (Darko Miljanovic) if(!is_readable($sFileName)) { $this->error = 1; return false; } $this->data = @file_get_contents($sFileName); if (!$this->data) { $this->error = 1; return false; } if (substr($this->data, 0, 8) != IDENTIFIER_OLE) { $this->error = 1; return false; } $this->numBigBlockDepotBlocks = GetInt4d($this->data, NUM_BIG_BLOCK_DEPOT_BLOCKS_POS); $this->sbdStartBlock = GetInt4d($this->data, SMALL_BLOCK_DEPOT_BLOCK_POS); $this->rootStartBlock = GetInt4d($this->data, ROOT_START_BLOCK_POS); $this->extensiOnBlock= GetInt4d($this->data, EXTENSION_BLOCK_POS); $this->numExtensiOnBlocks= GetInt4d($this->data, NUM_EXTENSION_BLOCK_POS); $bigBlockDepotBlocks = array(); $pos = BIG_BLOCK_DEPOT_BLOCKS_POS; $bbdBlocks = $this->numBigBlockDepotBlocks; if ($this->numExtensionBlocks != 0) { $bbdBlocks = (BIG_BLOCK_SIZE - BIG_BLOCK_DEPOT_BLOCKS_POS)/4; } for ($i = 0; $i <$bbdBlocks; $i++) { $bigBlockDepotBlocks[$i] = GetInt4d($this->data, $pos); $pos += 4; } for ($j = 0; $j <$this->numExtensionBlocks; $j++) { $pos = ($this->extensionBlock + 1) * BIG_BLOCK_SIZE; $blocksToRead = min($this->numBigBlockDepotBlocks - $bbdBlocks, BIG_BLOCK_SIZE / 4 - 1); for ($i = $bbdBlocks; $i <$bbdBlocks + $blocksToRead; $i++) { $bigBlockDepotBlocks[$i] = GetInt4d($this->data, $pos); $pos += 4; } $bbdBlocks += $blocksToRead; if ($bbdBlocks <$this->numBigBlockDepotBlocks) { $this->extensiOnBlock= GetInt4d($this->data, $pos); } } // readBigBlockDepot $pos = 0; $index = 0; $this->bigBlockChain = array(); for ($i = 0; $i <$this->numBigBlockDepotBlocks; $i++) { $pos = ($bigBlockDepotBlocks[$i] + 1) * BIG_BLOCK_SIZE; //echo "pos = $pos"; for ($j = 0 ; $jbigBlockChain[$index] = GetInt4d($this->data, $pos); $pos += 4 ; $index++; } } // readSmallBlockDepot(); $pos = 0; $index = 0; $sbdBlock = $this->sbdStartBlock; $this->smallBlockChain = array(); while ($sbdBlock != -2) { $pos = ($sbdBlock + 1) * BIG_BLOCK_SIZE; for ($j = 0; $j smallBlockChain[$index] = GetInt4d($this->data, $pos); $pos += 4; $index++; } $sbdBlock = $this->bigBlockChain[$sbdBlock]; } // readData(rootStartBlock) $block = $this->rootStartBlock; $pos = 0; $this->entry = $this->__readData($block); $this->__readPropertySets(); } function __readData($bl) { $block = $bl; $pos = 0; $data = &#39;&#39;; while ($block != -2) { $pos = ($block + 1) * BIG_BLOCK_SIZE; $data = $data.substr($this->data, $pos, BIG_BLOCK_SIZE); $block = $this->bigBlockChain[$block]; } return $data; } function __readPropertySets(){ $offset = 0; while ($offset entry)) { $d = substr($this->entry, $offset, PROPERTY_STORAGE_BLOCK_SIZE); $nameSize = ord($d[SIZE_OF_NAME_POS]) | (ord($d[SIZE_OF_NAME_POS+1]) <<8); $type = ord($d[TYPE_POS]); $startBlock = GetInt4d($d, START_BLOCK_POS); $size = GetInt4d($d, SIZE_POS); $name = &#39;&#39;; for ($i = 0; $i <$nameSize ; $i++) { $name .= $d[$i]; } $name = str_replace("\x00", "", $name); $this->props[] = array ( &#39;name&#39; => $name, &#39;type&#39; => $type, &#39;startBlock&#39; => $startBlock, &#39;size&#39; => $size); if ((strtolower($name) == "workbook") || ( strtolower($name) == "book")) { $this->wrkbook = count($this->props) - 1; } if ($name == "Root Entry") { $this->rootentry = count($this->props) - 1; } $offset += PROPERTY_STORAGE_BLOCK_SIZE; } } function getWorkBook(){ if ($this->props[$this->wrkbook][&#39;size&#39;] __readData($this->props[$this->rootentry][&#39;startBlock&#39;]); $streamData = &#39;&#39;; $block = $this->props[$this->wrkbook][&#39;startBlock&#39;]; $pos = 0; while ($block != -2) { $pos = $block * SMALL_BLOCK_SIZE; $streamData .= substr($rootdata, $pos, SMALL_BLOCK_SIZE); $block = $this->smallBlockChain[$block]; } return $streamData; }else{ $numBlocks = $this->props[$this->wrkbook][&#39;size&#39;] / BIG_BLOCK_SIZE; if ($this->props[$this->wrkbook][&#39;size&#39;] % BIG_BLOCK_SIZE != 0) { $numBlocks++; } if ($numBlocks == 0) return &#39;&#39;; $streamData = &#39;&#39;; $block = $this->props[$this->wrkbook][&#39;startBlock&#39;]; $pos = 0; while ($block != -2) { $pos = ($block + 1) * BIG_BLOCK_SIZE; $streamData .= substr($this->data, $pos, BIG_BLOCK_SIZE); $block = $this->bigBlockChain[$block]; } return $streamData; } } } define(&#39;SPREADSHEET_EXCEL_READER_BIFF8&#39;, 0x600); define(&#39;SPREADSHEET_EXCEL_READER_BIFF7&#39;, 0x500); define(&#39;SPREADSHEET_EXCEL_READER_WORKBOOKGLOBALS&#39;, 0x5); define(&#39;SPREADSHEET_EXCEL_READER_WORKSHEET&#39;, 0x10); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_BOF&#39;, 0x809); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_EOF&#39;, 0x0a); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_BOUNDSHEET&#39;, 0x85); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_DIMENSION&#39;, 0x200); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_ROW&#39;, 0x208); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_DBCELL&#39;, 0xd7); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_FILEPASS&#39;, 0x2f); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_NOTE&#39;, 0x1c); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_TXO&#39;, 0x1b6); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_RK&#39;, 0x7e); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_RK2&#39;, 0x27e); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_MULRK&#39;, 0xbd); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_MULBLANK&#39;, 0xbe); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_INDEX&#39;, 0x20b); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_SST&#39;, 0xfc); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_EXTSST&#39;, 0xff); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_CONTINUE&#39;, 0x3c); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_LABEL&#39;, 0x204); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_LABELSST&#39;, 0xfd); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_NUMBER&#39;, 0x203); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_NAME&#39;, 0x18); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_ARRAY&#39;, 0x221); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_STRING&#39;, 0x207); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_FORMULA&#39;, 0x406); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_FORMULA2&#39;, 0x6); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_FORMAT&#39;, 0x41e); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_XF&#39;, 0xe0); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_BOOLERR&#39;, 0x205); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_FONT&#39;, 0x0031); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_PALETTE&#39;, 0x0092); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_UNKNOWN&#39;, 0xffff); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_NINETEENFOUR&#39;, 0x22); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_MERGEDCELLS&#39;, 0xE5); define(&#39;SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS&#39; , 25569); define(&#39;SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS1904&#39;, 24107); define(&#39;SPREADSHEET_EXCEL_READER_MSINADAY&#39;, 86400); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_HYPER&#39;, 0x01b8); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_COLINFO&#39;, 0x7d); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_DEFCOLWIDTH&#39;, 0x55); define(&#39;SPREADSHEET_EXCEL_READER_TYPE_STANDARDWIDTH&#39;, 0x99); define(&#39;SPREADSHEET_EXCEL_READER_DEF_NUM_FORMAT&#39;, "%s"); /* * Main Class */ class Spreadsheet_Excel_Reader { // MK: Added to make data retrieval easier var $colnames = array(); var $colindexes = array(); var $standardColWidth = 0; var $defaultColWidth = 0; function myHex($d) { if ($d <16) return "0" . dechex($d); return dechex($d); } function dumpHexData($data, $pos, $length) { $info = ""; for ($i = 0; $i <= $length; $i++) { $info .= ($i==0?"":" ") . $this->myHex(ord($data[$pos + $i])) . (ord($data[$pos + $i])>31? "[" . $data[$pos + $i] . "]":&#39;&#39;); } return $info; } function getCol($col) { if (is_string($col)) { $col = strtolower($col); if (array_key_exists($col,$this->colnames)) { $col = $this->colnames[$col]; } } return $col; } // PUBLIC API FUNCTIONS // -------------------- function val($row,$col,$sheet=0) { $col = $this->getCol($col); if (array_key_exists($row,$this->sheets[$sheet][&#39;cells&#39;]) && array_key_exists($col,$this->sheets[$sheet][&#39;cells&#39;][$row])) { return $this->sheets[$sheet][&#39;cells&#39;][$row][$col]; } return ""; } function value($row,$col,$sheet=0) { return $this->val($row,$col,$sheet); } function info($row,$col,$type=&#39;&#39;,$sheet=0) { $col = $this->getCol($col); if (array_key_exists(&#39;cellsInfo&#39;,$this->sheets[$sheet]) && array_key_exists($row,$this->sheets[$sheet][&#39;cellsInfo&#39;]) && array_key_exists($col,$this->sheets[$sheet][&#39;cellsInfo&#39;][$row]) && array_key_exists($type,$this->sheets[$sheet][&#39;cellsInfo&#39;][$row][$col])) { return $this->sheets[$sheet][&#39;cellsInfo&#39;][$row][$col][$type]; } return ""; } function type($row,$col,$sheet=0) { return $this->info($row,$col,&#39;type&#39;,$sheet); } function raw($row,$col,$sheet=0) { return $this->info($row,$col,&#39;raw&#39;,$sheet); } function rowspan($row,$col,$sheet=0) { $val = $this->info($row,$col,&#39;rowspan&#39;,$sheet); if ($val=="") { return 1; } return $val; } function colspan($row,$col,$sheet=0) { $val = $this->info($row,$col,&#39;colspan&#39;,$sheet); if ($val=="") { return 1; } return $val; } function hyperlink($row,$col,$sheet=0) { $link = $this->sheets[$sheet][&#39;cellsInfo&#39;][$row][$col][&#39;hyperlink&#39;]; if ($link) { return $link[&#39;link&#39;]; } return &#39;&#39;; } function rowcount($sheet=0) { return $this->sheets[$sheet][&#39;numRows&#39;]; } function colcount($sheet=0) { return $this->sheets[$sheet][&#39;numCols&#39;]; } function colwidth($col,$sheet=0) { // Col width is actually the width of the number 0. So we have to estimate and come close return $this->colInfo[$sheet][$col][&#39;width&#39;]/9142*200; } function colhidden($col,$sheet=0) { return !!$this->colInfo[$sheet][$col][&#39;hidden&#39;]; } function rowheight($row,$sheet=0) { return $this->rowInfo[$sheet][$row][&#39;height&#39;]; } function rowhidden($row,$sheet=0) { return !!$this->rowInfo[$sheet][$row][&#39;hidden&#39;]; } // GET THE CSS FOR FORMATTING // ========================== function style($row,$col,$sheet=0,$properties=&#39;&#39;) { $css = ""; $fOnt=$this->font($row,$col,$sheet); if ($font!="") { $css .= "font-family:$font;"; } $align=$this->align($row,$col,$sheet); if ($align!="") { $css .= "text-align:$align;"; } $height=$this->height($row,$col,$sheet); if ($height!="") { $css .= "font-size:$height"."px;"; } $bgcolor=$this->bgColor($row,$col,$sheet); if ($bgcolor!="") { $bgcolor = $this->colors[$bgcolor]; $css .= "background-color:$bgcolor;"; } $color=$this->color($row,$col,$sheet); if ($color!="") { $css .= "color:$color;"; } $bold=$this->bold($row,$col,$sheet); if ($bold) { $css .= "font-weight:bold;"; } $italic=$this->italic($row,$col,$sheet); if ($italic) { $css .= "font-style:italic;"; } $underline=$this->underline($row,$col,$sheet); if ($underline) { $css .= "text-decoration:underline;"; } // Borders $bLeft = $this->borderLeft($row,$col,$sheet); $bRight = $this->borderRight($row,$col,$sheet); $bTop = $this->borderTop($row,$col,$sheet); $bBottom = $this->borderBottom($row,$col,$sheet); $bLeftCol = $this->borderLeftColor($row,$col,$sheet); $bRightCol = $this->borderRightColor($row,$col,$sheet); $bTopCol = $this->borderTopColor($row,$col,$sheet); $bBottomCol = $this->borderBottomColor($row,$col,$sheet); // Try to output the minimal required style if ($bLeft!="" && $bLeft==$bRight && $bRight==$bTop && $bTop==$bBottom) { $css .= "border:" . $this->lineStylesCss[$bLeft] .";"; } else { if ($bLeft!="") { $css .= "border-left:" . $this->lineStylesCss[$bLeft] .";"; } if ($bRight!="") { $css .= "border-right:" . $this->lineStylesCss[$bRight] .";"; } if ($bTop!="") { $css .= "border-top:" . $this->lineStylesCss[$bTop] .";"; } if ($bBottom!="") { $css .= "border-bottom:" . $this->lineStylesCss[$bBottom] .";"; } } // Only output border colors if there is an actual border specified if ($bLeft!="" && $bLeftCol!="") { $css .= "border-left-color:" . $bLeftCol .";"; } if ($bRight!="" && $bRightCol!="") { $css .= "border-right-color:" . $bRightCol .";"; } if ($bTop!="" && $bTopCol!="") { $css .= "border-top-color:" . $bTopCol . ";"; } if ($bBottom!="" && $bBottomCol!="") { $css .= "border-bottom-color:" . $bBottomCol .";"; } return $css; } // FORMAT PROPERTIES // ================= function format($row,$col,$sheet=0) { return $this->info($row,$col,&#39;format&#39;,$sheet); } function formatIndex($row,$col,$sheet=0) { return $this->info($row,$col,&#39;formatIndex&#39;,$sheet); } function formatColor($row,$col,$sheet=0) { return $this->info($row,$col,&#39;formatColor&#39;,$sheet); } // CELL (XF) PROPERTIES // ==================== function xfRecord($row,$col,$sheet=0) { $xfIndex = $this->info($row,$col,&#39;xfIndex&#39;,$sheet); if ($xfIndex!="") { return $this->xfRecords[$xfIndex]; } return null; } function xfProperty($row,$col,$sheet,$prop) { $xfRecord = $this->xfRecord($row,$col,$sheet); if ($xfRecord!=null) { return $xfRecord[$prop]; } return ""; } function align($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,&#39;align&#39;); } function bgColor($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,&#39;bgColor&#39;); } function borderLeft($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,&#39;borderLeft&#39;); } function borderRight($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,&#39;borderRight&#39;); } function borderTop($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,&#39;borderTop&#39;); } function borderBottom($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,&#39;borderBottom&#39;); } function borderLeftColor($row,$col,$sheet=0) { return $this->colors[$this->xfProperty($row,$col,$sheet,&#39;borderLeftColor&#39;)]; } function borderRightColor($row,$col,$sheet=0) { return $this->colors[$this->xfProperty($row,$col,$sheet,&#39;borderRightColor&#39;)]; } function borderTopColor($row,$col,$sheet=0) { return $this->colors[$this->xfProperty($row,$col,$sheet,&#39;borderTopColor&#39;)]; } function borderBottomColor($row,$col,$sheet=0) { return $this->colors[$this->xfProperty($row,$col,$sheet,&#39;borderBottomColor&#39;)]; } // FONT PROPERTIES // =============== function fontRecord($row,$col,$sheet=0) { $xfRecord = $this->xfRecord($row,$col,$sheet); if ($xfRecord!=null) { $fOnt= $xfRecord[&#39;fontIndex&#39;]; if ($font!=null) { return $this->fontRecords[$font]; } } return null; } function fontProperty($row,$col,$sheet=0,$prop) { $fOnt= $this->fontRecord($row,$col,$sheet); if ($font!=null) { return $font[$prop]; } return false; } function fontIndex($row,$col,$sheet=0) { return $this->xfProperty($row,$col,$sheet,&#39;fontIndex&#39;); } function color($row,$col,$sheet=0) { $formatColor = $this->formatColor($row,$col,$sheet); if ($formatColor!="") { return $formatColor; } $ci = $this->fontProperty($row,$col,$sheet,&#39;color&#39;); return $this->rawColor($ci); } function rawColor($ci) { if (($ci <> 0x7FFF) && ($ci <> &#39;&#39;)) { return $this->colors[$ci]; } return ""; } function bold($row,$col,$sheet=0) { return $this->fontProperty($row,$col,$sheet,&#39;bold&#39;); } function italic($row,$col,$sheet=0) { return $this->fontProperty($row,$col,$sheet,&#39;italic&#39;); } function underline($row,$col,$sheet=0) { return $this->fontProperty($row,$col,$sheet,&#39;under&#39;); } function height($row,$col,$sheet=0) { return $this->fontProperty($row,$col,$sheet,&#39;height&#39;); } function font($row,$col,$sheet=0) { return $this->fontProperty($row,$col,$sheet,&#39;font&#39;); } // DUMP AN HTML TABLE OF THE ENTIRE XLS DATA // ========================================= function dump($row_numbers=false,$col_letters=false,$sheet=0,$table_class=&#39;excel&#39;) { $out = " "; if ($col_letters) { $out .= "\n\t
"; return $out; } // -------------- // END PUBLIC API var $boundsheets = array(); var $formatRecords = array(); var $fOntRecords= array(); var $xfRecords = array(); var $colInfo = array(); var $rowInfo = array(); var $sst = array(); var $sheets = array(); var $data; var $_ole; var $_defaultEncoding = "gb2312"; var $_defaultFormat = SPREADSHEET_EXCEL_READER_DEF_NUM_FORMAT; var $_columnsFormat = array(); var $_rowoffset = 1; var $_coloffset = 1; /** * List of default date formats used by Excel */ var $dateFormats = array ( 0xe => "m/d/Y", 0xf => "M-d-Y", 0x10 => "d-M", 0x11 => "M-Y", 0x12 => "h:i a", 0x13 => "h:i:s a", 0x14 => "H:i", 0x15 => "H:i:s", 0x16 => "d/m/Y H:i", 0x2d => "i:s", 0x2e => "H:i:s", 0x2f => "i:s.S" ); /** * Default number formats used by Excel */ var $numberFormats = array( 0x1 => "0", 0x2 => "0.00", 0x3 => "#,##0", 0x4 => "#,##0.00", 0x5 => "\$#,##0;(\$#,##0)", 0x6 => "\$#,##0;[Red](\$#,##0)", 0x7 => "\$#,##0.00;(\$#,##0.00)", 0x8 => "\$#,##0.00;[Red](\$#,##0.00)", 0x9 => "0%", 0xa => "0.00%", 0xb => "0.00E+00", 0x25 => "#,##0;(#,##0)", 0x26 => "#,##0;[Red](#,##0)", 0x27 => "#,##0.00;(#,##0.00)", 0x28 => "#,##0.00;[Red](#,##0.00)", 0x29 => "#,##0;(#,##0)", // Not exactly 0x2a => "\$#,##0;(\$#,##0)", // Not exactly 0x2b => "#,##0.00;(#,##0.00)", // Not exactly 0x2c => "\$#,##0.00;(\$#,##0.00)", // Not exactly 0x30 => "##0.0E+0" ); var $colors = Array( 0x00 => "#000000", 0x01 => "#FFFFFF", 0x02 => "#FF0000", 0x03 => "#00FF00", 0x04 => "#0000FF", 0x05 => "#FFFF00", 0x06 => "#FF00FF", 0x07 => "#00FFFF", 0x08 => "#000000", 0x09 => "#FFFFFF", 0x0A => "#FF0000", 0x0B => "#00FF00", 0x0C => "#0000FF", 0x0D => "#FFFF00", 0x0E => "#FF00FF", 0x0F => "#00FFFF", 0x10 => "#800000", 0x11 => "#008000", 0x12 => "#000080", 0x13 => "#808000", 0x14 => "#800080", 0x15 => "#008080", 0x16 => "#C0C0C0", 0x17 => "#808080", 0x18 => "#9999FF", 0x19 => "#993366", 0x1A => "#FFFFCC", 0x1B => "#CCFFFF", 0x1C => "#660066", 0x1D => "#FF8080", 0x1E => "#0066CC", 0x1F => "#CCCCFF", 0x20 => "#000080", 0x21 => "#FF00FF", 0x22 => "#FFFF00", 0x23 => "#00FFFF", 0x24 => "#800080", 0x25 => "#800000", 0x26 => "#008080", 0x27 => "#0000FF", 0x28 => "#00CCFF", 0x29 => "#CCFFFF", 0x2A => "#CCFFCC", 0x2B => "#FFFF99", 0x2C => "#99CCFF", 0x2D => "#FF99CC", 0x2E => "#CC99FF", 0x2F => "#FFCC99", 0x30 => "#3366FF", 0x31 => "#33CCCC", 0x32 => "#99CC00", 0x33 => "#FFCC00", 0x34 => "#FF9900", 0x35 => "#FF6600", 0x36 => "#666699", 0x37 => "#969696", 0x38 => "#003366", 0x39 => "#339966", 0x3A => "#003300", 0x3B => "#333300", 0x3C => "#993300", 0x3D => "#993366", 0x3E => "#333399", 0x3F => "#333333", 0x40 => "#000000", 0x41 => "#FFFFFF", 0x43 => "#000000", 0x4D => "#000000", 0x4E => "#FFFFFF", 0x4F => "#000000", 0x50 => "#FFFFFF", 0x51 => "#000000", 0x7FFF => "#000000" ); var $lineStyles = array( 0x00 => "", 0x01 => "Thin", 0x02 => "Medium", 0x03 => "Dashed", 0x04 => "Dotted", 0x05 => "Thick", 0x06 => "Double", 0x07 => "Hair", 0x08 => "Medium dashed", 0x09 => "Thin dash-dotted", 0x0A => "Medium dash-dotted", 0x0B => "Thin dash-dot-dotted", 0x0C => "Medium dash-dot-dotted", 0x0D => "Slanted medium dash-dotted" ); var $lineStylesCss = array( "Thin" => "1px solid", "Medium" => "2px solid", "Dashed" => "1px dashed", "Dotted" => "1px dotted", "Thick" => "3px solid", "Double" => "double", "Hair" => "1px solid", "Medium dashed" => "2px dashed", "Thin dash-dotted" => "1px dashed", "Medium dash-dotted" => "2px dashed", "Thin dash-dot-dotted" => "1px dashed", "Medium dash-dot-dotted" => "2px dashed", "Slanted medium dash-dotte" => "2px dashed" ); function read16bitstring($data, $start) { $len = 0; while (ord($data[$start + $len]) + ord($data[$start + $len + 1]) > 0) $len++; return substr($data, $start, $len); } // ADDED by Matt Kruse for better formatting function _format_value($format,$num,$f) { // 49==TEXT format // http://code.google.com/p/php-excel-reader/issues/detail?id=7 if ( (!$f && $format=="%s") || ($f==49) || ($format=="GENERAL") ) { return array(&#39;string&#39;=>$num, &#39;formatColor&#39;=>null); } // Custom pattern can be POSITIVE;NEGATIVE;ZERO // The "text" option as 4th parameter is not handled $parts = split(";",$format); $pattern = $parts[0]; // Negative pattern if (count($parts)>2 && $num==0) { $pattern = $parts[2]; } // Zero pattern if (count($parts)>1 && $num<0) { $pattern = $parts[1]; $num = abs($num); } $color = ""; $matches = array(); $color_regex = "/^\[(BLACK|BLUE|CYAN|GREEN|MAGENTA|RED|WHITE|YELLOW)\]/i"; if (preg_match($color_regex,$pattern,$matches)) { $color = strtolower($matches[1]); $pattern = preg_replace($color_regex,"",$pattern); } // In Excel formats, "_" is used to add spacing, which we can&#39;t do in HTML $pattern = preg_replace("/_./","",$pattern); // Some non-number characters are escaped with \, which we don&#39;t need $pattern = preg_replace("/\\\/","",$pattern); // Some non-number strings are quoted, so we&#39;ll get rid of the quotes $pattern = preg_replace("/\"/","",$pattern); // TEMPORARY - Convert # to 0 $pattern = preg_replace("/\#/","0",$pattern); // Find out if we need comma formatting $has_commas = preg_match("/,/",$pattern); if ($has_commas) { $pattern = preg_replace("/,/","",$pattern); } // Handle Percentages if (preg_match("/\d(\%)([^\%]|$)/",$pattern,$matches)) { $num = $num * 100; $pattern = preg_replace("/(\d)(\%)([^\%]|$)/","$1%$3",$pattern); } // Handle the number itself $number_regex = "/(\d+)(\.?)(\d*)/"; if (preg_match($number_regex,$pattern,$matches)) { $left = $matches[1]; $dec = $matches[2]; $right = $matches[3]; if ($has_commas) { $formatted = number_format($num,strlen($right)); } else { $sprintf_pattern = "%1.".strlen($right)."f"; $formatted = sprintf($sprintf_pattern, $num); } $pattern = preg_replace($number_regex, $formatted, $pattern); } return array( &#39;string&#39;=>$pattern, &#39;formatColor&#39;=>$color ); } /** * Constructor * * Some basic initialisation */ function Spreadsheet_Excel_Reader($file=&#39;&#39;,$store_extended_info=true,$outputEncoding=&#39;&#39;) { $this->_ole =& new OLERead(); $this->setUTFEncoder(&#39;iconv&#39;); if ($outputEncoding != &#39;&#39;) { $this->setOutputEncoding($outputEncoding); } for ($i=1; $i<245; $i++) { $name = strtolower(( (($i-1)/26>=1)?chr(($i-1)/26+64):&#39;&#39;) . chr(($i-1)%26+65)); $this->colnames[$name] = $i; $this->colindexes[$i] = $name; } $this->store_extended_info = $store_extended_info; if ($file!="") { $this->read($file); } } /** * Set the encoding method */ function setOutputEncoding($encoding) { $this->_defaultEncoding = $encoding; } /** * $encoder = &#39;iconv&#39; or &#39;mb&#39; * set iconv if you would like use &#39;iconv&#39; for encode UTF-16LE to your encoding * set mb if you would like use &#39;mb_convert_encoding&#39; for encode UTF-16LE to your encoding */ function setUTFEncoder($encoder = &#39;iconv&#39;) { $this->_encoderFunction = &#39;&#39;; if ($encoder == &#39;iconv&#39;) { $this->_encoderFunction = function_exists(&#39;iconv&#39;) ? &#39;iconv&#39; : &#39;&#39;; } elseif ($encoder == &#39;mb&#39;) { $this->_encoderFunction = function_exists(&#39;mb_convert_encoding&#39;) ? &#39;mb_convert_encoding&#39; : &#39;&#39;; } } function setRowColOffset($iOffset) { $this->_rowoffset = $iOffset; $this->_coloffset = $iOffset; } /** * Set the default number format */ function setDefaultFormat($sFormat) { $this->_defaultFormat = $sFormat; } /** * Force a column to use a certain format */ function setColumnFormat($column, $sFormat) { $this->_columnsFormat[$column] = $sFormat; } /** * Read the spreadsheet file using OLE, then parse */ function read($sFileName) { $res = $this->_ole->read($sFileName); // oops, something goes wrong (Darko Miljanovic) if($res === false) { // check error code if($this->_ole->error == 1) { // bad file die(&#39;The filename &#39; . $sFileName . &#39; is not readable&#39;); } // check other error codes here (eg bad fileformat, etc...) } $this->data = $this->_ole->getWorkBook(); $this->_parse(); } /** * Parse a workbook * * @access private * @return bool */ function _parse() { $pos = 0; $data = $this->data; $code = v($data,$pos); $length = v($data,$pos+2); $version = v($data,$pos+4); $substreamType = v($data,$pos+6); $this->version = $version; if (($version != SPREADSHEET_EXCEL_READER_BIFF8) && ($version != SPREADSHEET_EXCEL_READER_BIFF7)) { return false; } if ($substreamType != SPREADSHEET_EXCEL_READER_WORKBOOKGLOBALS){ return false; } $pos += $length + 4; $code = v($data,$pos); $length = v($data,$pos+2); while ($code != SPREADSHEET_EXCEL_READER_TYPE_EOF) { switch ($code) { case SPREADSHEET_EXCEL_READER_TYPE_SST: $spos = $pos + 4; $limitpos = $spos + $length; $uniqueStrings = $this->_GetInt4d($data, $spos+4); $spos += 8; for ($i = 0; $i <$uniqueStrings; $i++) { // Read in the number of characters if ($spos == $limitpos) { $opcode = v($data,$spos); $cOnlength= v($data,$spos+2); if ($opcode != 0x3c) { return -1; } $spos += 4; $limitpos = $spos + $conlength; } $numChars = ord($data[$spos]) | (ord($data[$spos+1]) <<8); $spos += 2; $optiOnFlags= ord($data[$spos]); $spos++; $asciiEncoding = (($optionFlags & 0x01) == 0) ; $extendedString = ( ($optionFlags & 0x04) != 0); // See if string contains formatting information $richString = ( ($optionFlags & 0x08) != 0); if ($richString) { // Read in the crun $formattingRuns = v($data,$spos); $spos += 2; } if ($extendedString) { // Read in cchExtRst $extendedRunLength = $this->_GetInt4d($data, $spos); $spos += 4; } $len = ($asciiEncoding)? $numChars : $numChars*2; if ($spos + $len <$limitpos) { $retstr = substr($data, $spos, $len); $spos += $len; } else{ // found countinue $retstr = substr($data, $spos, $limitpos - $spos); $bytesRead = $limitpos - $spos; $charsLeft = $numChars - (($asciiEncoding) ? $bytesRead : ($bytesRead / 2)); $spos = $limitpos; while ($charsLeft > 0){ $opcode = v($data,$spos); $cOnlength= v($data,$spos+2); if ($opcode != 0x3c) { return -1; } $spos += 4; $limitpos = $spos + $conlength; $option = ord($data[$spos]); $spos += 1; if ($asciiEncoding && ($option == 0)) { $len = min($charsLeft, $limitpos - $spos); // min($charsLeft, $conlength); $retstr .= substr($data, $spos, $len); $charsLeft -= $len; $asciiEncoding = true; } elseif (!$asciiEncoding && ($option != 0)) { $len = min($charsLeft * 2, $limitpos - $spos); // min($charsLeft, $conlength); $retstr .= substr($data, $spos, $len); $charsLeft -= $len/2; $asciiEncoding = false; } elseif (!$asciiEncoding && ($option == 0)) { // Bummer - the string starts off as Unicode, but after the // continuation it is in straightforward ASCII encoding $len = min($charsLeft, $limitpos - $spos); // min($charsLeft, $conlength); for ($j = 0; $j <$len; $j++) { $retstr .= $data[$spos + $j].chr(0); } $charsLeft -= $len; $asciiEncoding = false; } else{ $newstr = &#39;&#39;; for ($j = 0; $j"; if ($row_numbers) { $out .= "\n\t\t \n"; } $out .= "\n"; for($row=1;$row<=$this->rowcount($sheet);$row++) { $rowheight = $this->rowheight($row,$sheet); $style = "height:" . ($rowheight*(4/3)) . "px;"; if ($this->rowhidden($row,$sheet)) { $style .= "display:none;"; } $out .= "\n\t  "; } for($i=1;$i<=$this->colcount($sheet);$i++) { $style = "width:" . ($this->colwidth($i,$sheet)*1) . "px;"; if ($this->colhidden($i,$sheet)) { $style .= "display:none;"; } $out .= "\n\t\t" . strtoupper($this->colindexes[$i]) . " "; } $out .= ""; if ($row_numbers) { $out .= "\n\t\t \n"; } $out .= "$row "; } for($col=1;$col<=$this->colcount($sheet);$col++) { // Account for Rowspans/Colspans $rowspan = $this->rowspan($row,$col,$sheet); $colspan = $this->colspan($row,$col,$sheet); for($i=0;$i<$rowspan;$i++) { for($j=0;$j<$colspan;$j++) { if ($i>0 || $j>0) { $this->sheets[$sheet][&#39;cellsInfo&#39;][$row+$i][$col+$j][&#39;dontprint&#39;]=1; } } } if(!$this->sheets[$sheet][&#39;cellsInfo&#39;][$row][$col][&#39;dontprint&#39;]) { $style = $this->style($row,$col,$sheet); if ($this->colhidden($col,$sheet)) { $style .= "display:none;"; } $out .= "\n\t\t1?" colspan=$colspan":"") . ($rowspan > 1?" rowspan=$rowspan":"") . ">"; $val = $this->val($row,$col,$sheet); if ($val==&#39;&#39;) { $val=" "; } else { $val = htmlentities($val); $link = $this->hyperlink($row,$col,$sheet); if ($link!=&#39;&#39;) { $val = "$val"; } } $out .= " "; } } $out .= "".nl2br($val)." "; $out .= "_encodeUTF16($retstr); if ($richString){ $spos += 4 * $formattingRuns; } // For extended strings, skip over the extended string data if ($extendedString) { $spos += $extendedRunLength; } $this->sst[]=$retstr; } break; case SPREADSHEET_EXCEL_READER_TYPE_FILEPASS: return false; break; case SPREADSHEET_EXCEL_READER_TYPE_NAME: break; case SPREADSHEET_EXCEL_READER_TYPE_FORMAT: $indexCode = v($data,$pos+4); if ($version == SPREADSHEET_EXCEL_READER_BIFF8) { $numchars = v($data,$pos+6); if (ord($data[$pos+8]) == 0){ $formatString = substr($data, $pos+9, $numchars); } else { $formatString = substr($data, $pos+9, $numchars*2); } } else { $numchars = ord($data[$pos+6]); $formatString = substr($data, $pos+7, $numchars*2); } $this->formatRecords[$indexCode] = $formatString; break; case SPREADSHEET_EXCEL_READER_TYPE_FONT: $height = v($data,$pos+4); $option = v($data,$pos+6); $color = v($data,$pos+8); $weight = v($data,$pos+10); $under = ord($data[$pos+14]); $fOnt= ""; // Font name $numchars = ord($data[$pos+18]); if ((ord($data[$pos+19]) & 1) == 0){ $fOnt= substr($data, $pos+20, $numchars); } else { $fOnt= substr($data, $pos+20, $numchars*2); $fOnt= $this->_encodeUTF16($font); } $this->fontRecords[] = array( &#39;height&#39; => $height / 20, &#39;italic&#39; => !!($option & 2), &#39;color&#39; => $color, &#39;under&#39; => !($under==0), &#39;bold&#39; => ($weight==700), &#39;font&#39; => $font, &#39;raw&#39; => $this->dumpHexData($data, $pos+3, $length) ); break; case SPREADSHEET_EXCEL_READER_TYPE_PALETTE: $colors = ord($data[$pos+4]) | ord($data[$pos+5]) <<8; for ($coli = 0; $coli <$colors; $coli++) { $colOff = $pos + 2 + ($coli * 4); $colr = ord($data[$colOff]); $colg = ord($data[$colOff+1]); $colb = ord($data[$colOff+2]); $this->colors[0x07 + $coli] = &#39;#&#39; . $this->myhex($colr) . $this->myhex($colg) . $this->myhex($colb); } break; case SPREADSHEET_EXCEL_READER_TYPE_XF: $fOntIndexCode= (ord($data[$pos+4]) | ord($data[$pos+5]) <<8) - 1; $fOntIndexCode= max(0,$fontIndexCode); $indexCode = ord($data[$pos+6]) | ord($data[$pos+7]) <<8; $alignbit = ord($data[$pos+10]) & 3; $bgi = (ord($data[$pos+22]) | ord($data[$pos+23]) <<8) & 0x3FFF; $bgcolor = ($bgi & 0x7F); // $bgcolor = ($bgi & 0x3f80) >> 7; $align = ""; if ($alignbit==3) { $align="right"; } if ($alignbit==2) { $align="center"; } $fillPattern = (ord($data[$pos+21]) & 0xFC) >> 2; if ($fillPattern == 0) { $bgcolor = ""; } $xf = array(); $xf[&#39;formatIndex&#39;] = $indexCode; $xf[&#39;align&#39;] = $align; $xf[&#39;fontIndex&#39;] = $fontIndexCode; $xf[&#39;bgColor&#39;] = $bgcolor; $xf[&#39;fillPattern&#39;] = $fillPattern; $border = ord($data[$pos+14]) | (ord($data[$pos+15]) <<8) | (ord($data[$pos+16]) <<16) | (ord($data[$pos+17]) <<24); $xf[&#39;borderLeft&#39;] = $this->lineStyles[($border & 0xF)]; $xf[&#39;borderRight&#39;] = $this->lineStyles[($border & 0xF0) >> 4]; $xf[&#39;borderTop&#39;] = $this->lineStyles[($border & 0xF00) >> 8]; $xf[&#39;borderBottom&#39;] = $this->lineStyles[($border & 0xF000) >> 12]; $xf[&#39;borderLeftColor&#39;] = ($border & 0x7F0000) >> 16; $xf[&#39;borderRightColor&#39;] = ($border & 0x3F800000) >> 23; $border = (ord($data[$pos+18]) | ord($data[$pos+19]) <<8); $xf[&#39;borderTopColor&#39;] = ($border & 0x7F); $xf[&#39;borderBottomColor&#39;] = ($border & 0x3F80) >> 7; if (array_key_exists($indexCode, $this->dateFormats)) { $xf[&#39;type&#39;] = &#39;date&#39;; $xf[&#39;format&#39;] = $this->dateFormats[$indexCode]; if ($align==&#39;&#39;) { $xf[&#39;align&#39;] = &#39;right&#39;; } }elseif (array_key_exists($indexCode, $this->numberFormats)) { $xf[&#39;type&#39;] = &#39;number&#39;; $xf[&#39;format&#39;] = $this->numberFormats[$indexCode]; if ($align==&#39;&#39;) { $xf[&#39;align&#39;] = &#39;right&#39;; } }else{ $isdate = FALSE; $formatstr = &#39;&#39;; if ($indexCode > 0){ if (isset($this->formatRecords[$indexCode])) $formatstr = $this->formatRecords[$indexCode]; if ($formatstr!="") { $tmp = preg_replace("/\;.*/","",$formatstr); $tmp = preg_replace("/^\[[^\]]*\]/","",$tmp); if (preg_match("/[^hmsday\/\-:\s\\\,AMP]/i", $tmp) == 0) { // found day and time format $isdate = TRUE; $formatstr = $tmp; $formatstr = str_replace(array(&#39;AM/PM&#39;,&#39;mmmm&#39;,&#39;mmm&#39;), array(&#39;a&#39;,&#39;F&#39;,&#39;M&#39;), $formatstr); // m/mm are used for both minutes and months - oh SNAP! // This mess tries to fix for that. // &#39;m&#39; == minutes only if following h/hh or preceding s/ss $formatstr = preg_replace("/(h:?)mm?/","$1i", $formatstr); $formatstr = preg_replace("/mm?(:?s)/","i$1", $formatstr); // A single &#39;m&#39; = n in PHP $formatstr = preg_replace("/(^|[^m])m([^m]|$)/", &#39;$1n$2&#39;, $formatstr); $formatstr = preg_replace("/(^|[^m])m([^m]|$)/", &#39;$1n$2&#39;, $formatstr); // else it&#39;s months $formatstr = str_replace(&#39;mm&#39;, &#39;m&#39;, $formatstr); // Convert single &#39;d&#39; to &#39;j&#39; $formatstr = preg_replace("/(^|[^d])d([^d]|$)/", &#39;$1j$2&#39;, $formatstr); $formatstr = str_replace(array(&#39;dddd&#39;,&#39;ddd&#39;,&#39;dd&#39;,&#39;yyyy&#39;,&#39;yy&#39;,&#39;hh&#39;,&#39;h&#39;), array(&#39;l&#39;,&#39;D&#39;,&#39;d&#39;,&#39;Y&#39;,&#39;y&#39;,&#39;H&#39;,&#39;g&#39;), $formatstr); $formatstr = preg_replace("/ss?/