reader.php.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 811 行 · 第 1/3 页

SVN-BASE
811
字号
<?php//require_once 'PEAR.php';require_once 'oleread.inc';//define('Spreadsheet_Excel_Reader_HAVE_ICONV', function_exists('iconv'));//define('Spreadsheet_Excel_Reader_HAVE_MB', function_exists('mb_convert_encoding'));define('Spreadsheet_Excel_Reader_BIFF8', 0x600);define('Spreadsheet_Excel_Reader_BIFF7', 0x500);define('Spreadsheet_Excel_Reader_WorkbookGlobals', 0x5);define('Spreadsheet_Excel_Reader_Worksheet', 0x10);define('Spreadsheet_Excel_Reader_Type_BOF', 0x809);define('Spreadsheet_Excel_Reader_Type_EOF', 0x0a);define('Spreadsheet_Excel_Reader_Type_BOUNDSHEET', 0x85);define('Spreadsheet_Excel_Reader_Type_DIMENSION', 0x200);define('Spreadsheet_Excel_Reader_Type_ROW', 0x208);define('Spreadsheet_Excel_Reader_Type_DBCELL', 0xd7);define('Spreadsheet_Excel_Reader_Type_FILEPASS', 0x2f);define('Spreadsheet_Excel_Reader_Type_NOTE', 0x1c);define('Spreadsheet_Excel_Reader_Type_TXO', 0x1b6);define('Spreadsheet_Excel_Reader_Type_RK', 0x7e);define('Spreadsheet_Excel_Reader_Type_RK2', 0x27e);define('Spreadsheet_Excel_Reader_Type_MULRK', 0xbd);define('Spreadsheet_Excel_Reader_Type_MULBLANK', 0xbe);define('Spreadsheet_Excel_Reader_Type_INDEX', 0x20b);define('Spreadsheet_Excel_Reader_Type_SST', 0xfc);define('Spreadsheet_Excel_Reader_Type_EXTSST', 0xff);define('Spreadsheet_Excel_Reader_Type_CONTINUE', 0x3c);define('Spreadsheet_Excel_Reader_Type_LABEL', 0x204);define('Spreadsheet_Excel_Reader_Type_LABELSST', 0xfd);define('Spreadsheet_Excel_Reader_Type_NUMBER', 0x203);define('Spreadsheet_Excel_Reader_Type_NAME', 0x18);define('Spreadsheet_Excel_Reader_Type_ARRAY', 0x221);define('Spreadsheet_Excel_Reader_Type_STRING', 0x207);define('Spreadsheet_Excel_Reader_Type_FORMULA', 0x406);define('Spreadsheet_Excel_Reader_Type_FORMULA2', 0x6);define('Spreadsheet_Excel_Reader_Type_FORMAT', 0x41e);define('Spreadsheet_Excel_Reader_Type_XF', 0xe0);define('Spreadsheet_Excel_Reader_Type_BOOLERR', 0x205);define('Spreadsheet_Excel_Reader_Type_UNKNOWN', 0xffff);define('Spreadsheet_Excel_Reader_Type_NINETEENFOUR', 0x22);define('Spreadsheet_Excel_Reader_Type_MERGEDCELLS', 0xE5);define('Spreadsheet_Excel_Reader_utcOffsetDays' , 25569);define('Spreadsheet_Excel_Reader_utcOffsetDays1904', 24107);define('Spreadsheet_Excel_Reader_msInADay', 24 * 60 * 60);//define('Spreadsheet_Excel_Reader_DEF_NUM_FORMAT', "%.2f");define('Spreadsheet_Excel_Reader_DEF_NUM_FORMAT', "%s");// function file_get_contents for PHP < 4.3.0// Thanks Marian Steinbach for this functionif (!function_exists('file_get_contents')) {    function file_get_contents($filename, $use_include_path = 0) {        $data = '';        $file = @fopen($filename, "rb", $use_include_path);        if ($file) {            while (!feof($file)) $data .= fread($file, 1024);            fclose($file);        } else {            // There was a problem opening the file            $data = FALSE;        }        return $data;    }}//class Spreadsheet_Excel_Reader extends PEAR {class Spreadsheet_Excel_Reader {    var $boundsheets = array();    var $formatRecords = array();    var $sst = array();    var $sheets = array();    var $data;    var $pos;    var $_ole;    var $_defaultEncoding;    var $_defaultFormat = Spreadsheet_Excel_Reader_DEF_NUM_FORMAT;    var $_columnsFormat = array();    var $_rowoffset = 1;    var $_coloffset = 1;        var $dateFormats = array (        0xe => "d/m/Y",        0xf => "d-M-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");    var $numberFormats = array(        0x1 => "%1.0f", // "0"        0x2 => "%1.2f", // "0.00",        0x3 => "%1.0f", //"#,##0",        0x4 => "%1.2f", //"#,##0.00",        0x5 => "%1.0f", /*"$#,##0;($#,##0)",*/        0x6 => '$%1.0f', /*"$#,##0;($#,##0)",*/        0x7 => '$%1.2f', //"$#,##0.00;($#,##0.00)",        0x8 => '$%1.2f', //"$#,##0.00;($#,##0.00)",        0x9 => '%1.0f%%', // "0%"        0xa => '%1.2f%%', // "0.00%"        0xb => '%1.2f', // 0.00E00",        0x25 => '%1.0f', // "#,##0;(#,##0)",        0x26 => '%1.0f', //"#,##0;(#,##0)",        0x27 => '%1.2f', //"#,##0.00;(#,##0.00)",        0x28 => '%1.2f', //"#,##0.00;(#,##0.00)",        0x29 => '%1.0f', //"#,##0;(#,##0)",        0x2a => '$%1.0f', //"$#,##0;($#,##0)",        0x2b => '%1.2f', //"#,##0.00;(#,##0.00)",        0x2c => '$%1.2f', //"$#,##0.00;($#,##0.00)",        0x30 => '%1.0f'); //"##0.0E0";    function Spreadsheet_Excel_Reader(){        $this->_ole =& new OLERead();        $this->setUTFEncoder('iconv');    }    function setOutputEncoding($Encoding){        $this->_defaultEncoding = $Encoding;    }    /**    *  $encoder = 'iconv' or 'mb'    *  set iconv if you would like use 'iconv' for encode UTF-16LE to your encoding    *  set mb if you would like use 'mb_convert_encoding' for encode UTF-16LE to your encoding    */    function setUTFEncoder($encoder = 'iconv'){    	$this->_encoderFunction = '';    	if ($encoder == 'iconv'){        	$this->_encoderFunction = function_exists('iconv') ? 'iconv' : '';        }elseif ($encoder == 'mb') {        	$this->_encoderFunction = function_exists('mb_convert_encoding') ? 'mb_convert_encoding' : '';    	}    }    function setRowColOffset($iOffset){        $this->_rowoffset = $iOffset;		$this->_coloffset = $iOffset;    }    function setDefaultFormat($sFormat){        $this->_defaultFormat = $sFormat;    }    function setColumnFormat($column, $sFormat){        $this->_columnsFormat[$column] = $sFormat;    }    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('The filename ' . $sFileName . ' is not readable');	                return;        	}        	// check other error codes here (eg bad fileformat, etc...)        }        $this->data = $this->_ole->getWorkBook();                /*        $res = $this->_ole->read($sFileName);        if ($this->isError($res)) {//		var_dump($res);		            return $this->raiseError($res);        }        $total = $this->_ole->ppsTotal();        for ($i = 0; $i < $total; $i++) {            if ($this->_ole->isFile($i)) {                $type = unpack("v", $this->_ole->getData($i, 0, 2));                if ($type[''] == 0x0809)  { // check if it's a BIFF stream                    $this->_index = $i;                    $this->data = $this->_ole->getData($i, 0, $this->_ole->getDataLength($i));                    break;                }            }        }        if ($this->_index === null) {            return $this->raiseError("$file doesn't seem to be an Excel file");        }                */				//var_dump($this->data);	//echo "data =".$this->data;	        $this->pos = 0;        //$this->readRecords();        $this->_parse();    }    function _parse(){        $pos = 0;        $code = ord($this->data[$pos]) | ord($this->data[$pos+1])<<8;        $length = ord($this->data[$pos+2]) | ord($this->data[$pos+3])<<8;        $version = ord($this->data[$pos + 4]) | ord($this->data[$pos + 5])<<8;        $substreamType = ord($this->data[$pos + 6]) | ord($this->data[$pos + 7])<<8;        //echo "Start parse code=".base_convert($code,10,16)." version=".base_convert($version,10,16)." substreamType=".base_convert($substreamType,10,16).""."\n";        if (($version != Spreadsheet_Excel_Reader_BIFF8) && ($version != Spreadsheet_Excel_Reader_BIFF7)) {            return false;        }        if ($substreamType != Spreadsheet_Excel_Reader_WorkbookGlobals){            return false;        }        //print_r($rec);        $pos += $length + 4;        $code = ord($this->data[$pos]) | ord($this->data[$pos+1])<<8;        $length = ord($this->data[$pos+2]) | ord($this->data[$pos+3])<<8;        while ($code != Spreadsheet_Excel_Reader_Type_EOF){            switch ($code) {                case Spreadsheet_Excel_Reader_Type_SST:                    //echo "Type_SST\n";                     $spos = $pos + 4;                     $limitpos = $spos + $length;                     $uniqueStrings = $this->_GetInt4d($this->data, $spos+4);                                                $spos += 8;                                       for ($i = 0; $i < $uniqueStrings; $i++) {        // Read in the number of characters                                                if ($spos == $limitpos) {                                                $opcode = ord($this->data[$spos]) | ord($this->data[$spos+1])<<8;                                                $conlength = ord($this->data[$spos+2]) | ord($this->data[$spos+3])<<8;                                                        if ($opcode != 0x3c) {                                                                return -1;                                                        }                                                $spos += 4;                                                $limitpos = $spos + $conlength;                                                }                                                $numChars = ord($this->data[$spos]) | (ord($this->data[$spos+1]) << 8);                                                //echo "i = $i pos = $pos numChars = $numChars ";                                                $spos += 2;                                                $optionFlags = ord($this->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 = ord($this->data[$spos]) | (ord($this->data[$spos+1]) << 8);                                                        $spos += 2;                                                }                                                if ($extendedString) {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?