From 43f1993e609800d2a45f8df16243a073f70444a8 Mon Sep 17 00:00:00 2001 From: Xavier Noguer Gallego Date: Mon, 28 Apr 2003 21:02:02 +0000 Subject: [PATCH] fixing formula tokenizer bug (tokenizing as number instead of sheet name) (JT Hughes) git-svn-id: https://svn.php.net/repository/pear/packages/Spreadsheet_Excel_Writer/trunk@124983 c90b9560-bf6c-de11-be94-00142212c4b1 --- Writer/Parser.php | 7 ++++--- Writer/Workbook.php | 30 +++++++++++++++--------------- package.xml | 5 ++++- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/Writer/Parser.php b/Writer/Parser.php index 6d72d83..2b2faf0 100644 --- a/Writer/Parser.php +++ b/Writer/Parser.php @@ -1086,10 +1086,11 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR { return($token); } - // If it's a number - elseif(is_numeric($token) and !is_numeric($token.$this->_lookahead)) + // If it's a number (check that it's not a sheet name) + elseif (is_numeric($token) and !is_numeric($token.$this->_lookahead) and + ($this->_lookahead != '!')) { - return($token); + return $token; } // If it's a string (of maximum 255 characters) elseif(ereg("^\"[^\"]{0,255}\"$",$token)) diff --git a/Writer/Workbook.php b/Writer/Workbook.php index 1115ada..257a955 100644 --- a/Writer/Workbook.php +++ b/Writer/Workbook.php @@ -33,10 +33,13 @@ */ require_once('Spreadsheet/Excel/Writer/Format.php'); -require_once('Spreadsheet/Excel/Writer/OLEwriter.php'); +//require_once('Spreadsheet/Excel/Writer/OLEwriter.php'); require_once('Spreadsheet/Excel/Writer/BIFFwriter.php'); require_once('Spreadsheet/Excel/Writer/Worksheet.php'); require_once('Spreadsheet/Excel/Writer/Parser.php'); +require_once('OLE/PPS/Root.php'); +require_once('OLE/PPS/File.php'); + /** * Class for generating Excel Spreadsheets @@ -430,28 +433,25 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri } /** - * Store the workbook in an OLE container if the total size of the workbook data - * is less than ~ 7MB. + * Store the workbook in an OLE container * * @access private */ function _storeOLEFile() { - $OLE = new Spreadsheet_Excel_Writer_OLEwriter($this->_filename); - $this->_tmp_filename = $OLE->_tmp_filename; - // Write Worksheet data if data <~ 7MB - if ($OLE->setSize($this->_biffsize)) + $OLE = new OLE_PPS_File(OLE::Asc2Ucs('Book')); + $OLE->append($this->_data); + foreach ($this->_worksheets as $sheet) { - $OLE->writeHeader(); - $OLE->write($this->_data); - foreach($this->_worksheets as $sheet) - { - while ($tmp = $sheet->getData()) { - $OLE->write($tmp); - } + while ($tmp = $sheet->getData()) { + $OLE->append($tmp); } } - $OLE->close(); + $root = new OLE_PPS_Root(time(), time(), array($OLE)); + $res = $root->save($this->_filename); + if ($this->isError($res)) { + die("OLE Error: ".$res->getMessage()); + } } /** diff --git a/package.xml b/package.xml index d9a14e1..596f7d9 100644 --- a/package.xml +++ b/package.xml @@ -25,7 +25,7 @@ - 0.2 + 0.3 2003-03-17 -added several formatting methods: setTextRotation(), setStrikeOut(), @@ -50,6 +50,9 @@ + + OLE +