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 + -
显示快捷键?