CS fixes (bug #2582, patch by helgi)

CVS: ----------------------------------------------------------------------
CVS: Enter Log.  Lines beginning with `CVS:' are removed automatically
CVS: 
CVS: Committing in .
CVS: 
CVS: Modified Files:
CVS: 	Writer.php Writer/BIFFwriter.php Writer/Format.php 
CVS: 	Writer/OLEwriter.php Writer/Parser.php Writer/Validator.php 
CVS: 	Writer/Workbook.php Writer/Worksheet.php 
CVS: ----------------------------------------------------------------------


git-svn-id: https://svn.php.net/repository/pear/packages/Spreadsheet_Excel_Writer/trunk@181149 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
Arnaud Limbourg 2005-03-01 21:31:35 +00:00
parent 57d191ae4e
commit e4b8fe22f3
8 changed files with 421 additions and 668 deletions

View File

@ -31,8 +31,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
require_once('PEAR.php'); require_once 'PEAR.php';
require_once('Spreadsheet/Excel/Writer/Workbook.php'); require_once 'Spreadsheet/Excel/Writer/Workbook.php';
/** /**
* Class for writing Excel Spreadsheets. This class should change COMPLETELY. * Class for writing Excel Spreadsheets. This class should change COMPLETELY.

View File

@ -32,7 +32,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
require_once('PEAR.php'); require_once 'PEAR.php';
/** /**
* Class for writing Excel BIFF records. * Class for writing Excel BIFF records.
@ -112,11 +112,9 @@ class Spreadsheet_Excel_Writer_BIFFwriter extends PEAR
$number = pack("C8", 0x8D, 0x97, 0x6E, 0x12, 0x83, 0xC0, 0xF3, 0x3F); $number = pack("C8", 0x8D, 0x97, 0x6E, 0x12, 0x83, 0xC0, 0xF3, 0x3F);
if ($number == $teststr) { if ($number == $teststr) {
$byte_order = 0; // Little Endian $byte_order = 0; // Little Endian
} } elseif ($number == strrev($teststr)){
elseif ($number == strrev($teststr)){
$byte_order = 1; // Big Endian $byte_order = 1; // Big Endian
} } else {
else {
// Give up. I'll fix this in a later version. // Give up. I'll fix this in a later version.
return $this->raiseError("Required floating point format ". return $this->raiseError("Required floating point format ".
"not supported on this platform."); "not supported on this platform.");
@ -173,8 +171,7 @@ class Spreadsheet_Excel_Writer_BIFFwriter extends PEAR
$unknown = ''; $unknown = '';
$build = 0x096C; $build = 0x096C;
$year = 0x07C9; $year = 0x07C9;
} } elseif ($this->_BIFF_version == 0x0600) {
elseif ($this->_BIFF_version == 0x0600) {
$length = 0x0010; $length = 0x0010;
$unknown = pack("VV", 0x00000041, 0x00000006); //unknown last 8 bytes for BIFF8 $unknown = pack("VV", 0x00000041, 0x00000006); //unknown last 8 bytes for BIFF8
$build = 0x0DBB; $build = 0x0DBB;
@ -224,8 +221,7 @@ class Spreadsheet_Excel_Writer_BIFFwriter extends PEAR
$header = pack("vv", $record, $limit); // Headers for continue records $header = pack("vv", $record, $limit); // Headers for continue records
// Retrieve chunks of 2080/8224 bytes +4 for the header. // Retrieve chunks of 2080/8224 bytes +4 for the header.
for($i = $limit; $i < strlen($data) - $limit; $i += $limit) for ($i = $limit; $i < strlen($data) - $limit; $i += $limit) {
{
$tmp .= $header; $tmp .= $header;
$tmp .= substr($data, $i, $limit); $tmp .= substr($data, $i, $limit);
} }
@ -233,7 +229,7 @@ class Spreadsheet_Excel_Writer_BIFFwriter extends PEAR
// Retrieve the last chunk of data // Retrieve the last chunk of data
$header = pack("vv", $record, strlen($data) - $i); $header = pack("vv", $record, strlen($data) - $i);
$tmp .= $header; $tmp .= $header;
$tmp .= substr($data,$i,strlen($data) - $i); $tmp .= substr($data, $i, strlen($data) - $i);
return $tmp; return $tmp;
} }

View File

@ -32,7 +32,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
require_once('PEAR.php'); require_once 'PEAR.php';
/** /**
* Class for generating Excel XF records (formats) * Class for generating Excel XF records (formats)
@ -296,10 +296,9 @@ class Spreadsheet_Excel_Writer_Format extends PEAR
$this->_diag_color = 0x40; $this->_diag_color = 0x40;
// Set properties passed to Spreadsheet_Excel_Writer_Workbook::addFormat() // Set properties passed to Spreadsheet_Excel_Writer_Workbook::addFormat()
foreach($properties as $property => $value) foreach ($properties as $property => $value)
{
if(method_exists($this,'set'.ucwords($property)))
{ {
if (method_exists($this, 'set'.ucwords($property))) {
$method_name = 'set'.ucwords($property); $method_name = 'set'.ucwords($property);
$this->$method_name($value); $this->$method_name($value);
} }
@ -318,8 +317,7 @@ class Spreadsheet_Excel_Writer_Format extends PEAR
// Set the type of the XF record and some of the attributes. // Set the type of the XF record and some of the attributes.
if ($style == "style") { if ($style == "style") {
$style = 0xFFF5; $style = 0xFFF5;
} } else {
else {
$style = $this->_locked; $style = $this->_locked;
$style |= $this->_hidden << 1; $style |= $this->_hidden << 1;
} }
@ -364,8 +362,7 @@ class Spreadsheet_Excel_Writer_Format extends PEAR
$ifnt = $this->font_index; // Index to FONT record $ifnt = $this->font_index; // Index to FONT record
$ifmt = $this->_num_format; // Index to FORMAT record $ifmt = $this->_num_format; // Index to FORMAT record
if ($this->_BIFF_version == 0x0500) if ($this->_BIFF_version == 0x0500) {
{
$align = $this->_text_h_align; // Alignment $align = $this->_text_h_align; // Alignment
$align |= $this->_text_wrap << 3; $align |= $this->_text_wrap << 3;
$align |= $this->_text_v_align << 4; $align |= $this->_text_v_align << 4;
@ -397,9 +394,7 @@ class Spreadsheet_Excel_Writer_Format extends PEAR
$data = pack("vvvvvvvv", $ifnt, $ifmt, $style, $align, $data = pack("vvvvvvvv", $ifnt, $ifmt, $style, $align,
$icv, $fill, $icv, $fill,
$border1, $border2); $border1, $border2);
} } elseif ($this->_BIFF_version == 0x0600) {
elseif ($this->_BIFF_version == 0x0600)
{
$align = $this->_text_h_align; // Alignment $align = $this->_text_h_align; // Alignment
$align |= $this->_text_wrap << 3; $align |= $this->_text_wrap << 3;
$align |= $this->_text_v_align << 4; $align |= $this->_text_v_align << 4;
@ -464,8 +459,7 @@ class Spreadsheet_Excel_Writer_Format extends PEAR
$record = 0x31; // Record identifier $record = 0x31; // Record identifier
if ($this->_BIFF_version == 0x0500) { if ($this->_BIFF_version == 0x0500) {
$length = 0x0F + $cch; // Record length $length = 0x0F + $cch; // Record length
} } elseif ($this->_BIFF_version == 0x0600) {
elseif ($this->_BIFF_version == 0x0600) {
$length = 0x10 + $cch; $length = 0x10 + $cch;
} }
$reserved = 0x00; // Reserved $reserved = 0x00; // Reserved
@ -488,8 +482,7 @@ class Spreadsheet_Excel_Writer_Format extends PEAR
$data = pack("vvvvvCCCCC", $dyHeight, $grbit, $icv, $bls, $data = pack("vvvvvCCCCC", $dyHeight, $grbit, $icv, $bls,
$sss, $uls, $bFamily, $sss, $uls, $bFamily,
$bCharSet, $reserved, $cch); $bCharSet, $reserved, $cch);
} } elseif ($this->_BIFF_version == 0x0600) {
elseif ($this->_BIFF_version == 0x0600) {
$data = pack("vvvvvCCCCCC", $dyHeight, $grbit, $icv, $bls, $data = pack("vvvvvCCCCCC", $dyHeight, $grbit, $icv, $bls,
$sss, $uls, $bFamily, $sss, $uls, $bFamily,
$bCharSet, $reserved, $cch, $encoding); $bCharSet, $reserved, $cch, $encoding);
@ -561,27 +554,27 @@ class Spreadsheet_Excel_Writer_Format extends PEAR
); );
// Return the default color, 0x7FFF, if undef, // Return the default color, 0x7FFF, if undef,
if($name_color == '') { if ($name_color == '') {
return(0x7FFF); return(0x7FFF);
} }
// or the color string converted to an integer, // or the color string converted to an integer,
if(isset($colors[$name_color])) { if (isset($colors[$name_color])) {
return($colors[$name_color]); return($colors[$name_color]);
} }
// or the default color if string is unrecognised, // or the default color if string is unrecognised,
if(preg_match("/\D/",$name_color)) { if (preg_match("/\D/",$name_color)) {
return(0x7FFF); return(0x7FFF);
} }
// or an index < 8 mapped into the correct range, // or an index < 8 mapped into the correct range,
if($name_color < 8) { if ($name_color < 8) {
return($name_color + 8); return($name_color + 8);
} }
// or the default color if arg is outside range, // or the default color if arg is outside range,
if($name_color > 63) { if ($name_color > 63) {
return(0x7FFF); return(0x7FFF);
} }
@ -669,16 +662,16 @@ class Spreadsheet_Excel_Writer_Format extends PEAR
*/ */
function setBold($weight = 1) function setBold($weight = 1)
{ {
if($weight == 1) { if ($weight == 1) {
$weight = 0x2BC; // Bold text $weight = 0x2BC; // Bold text
} }
if($weight == 0) { if ($weight == 0) {
$weight = 0x190; // Normal text $weight = 0x190; // Normal text
} }
if($weight < 0x064) { if ($weight < 0x064) {
$weight = 0x190; // Lower bound $weight = 0x190; // Lower bound
} }
if($weight > 0x3E8) { if ($weight > 0x3E8) {
$weight = 0x190; // Upper bound $weight = 0x190; // Upper bound
} }
$this->_bold = $weight; $this->_bold = $weight;

View File

@ -32,7 +32,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
require_once('PEAR.php'); require_once 'PEAR.php';
/** /**
* Class for creating OLE streams for Excel Spreadsheets * Class for creating OLE streams for Excel Spreadsheets
@ -131,18 +131,15 @@ class Spreadsheet_Excel_Writer_OLEwriter extends PEAR
{ {
$OLEfile = $this->_OLEfilename; $OLEfile = $this->_OLEfilename;
if(($OLEfile == '-') or ($OLEfile == '')) if (($OLEfile == '-') or ($OLEfile == '')) {
{
$this->_tmp_filename = tempnam("/tmp", "OLEwriter"); $this->_tmp_filename = tempnam("/tmp", "OLEwriter");
$fh = fopen($this->_tmp_filename,"wb"); $fh = fopen($this->_tmp_filename, "wb");
if ($fh == false) { if ($fh == false) {
$this->raiseError("Can't create temporary file."); $this->raiseError("Can't create temporary file.");
} }
} } else {
else
{
// Create a new file, open for writing (in binmode) // Create a new file, open for writing (in binmode)
$fh = fopen($OLEfile,"wb"); $fh = fopen($OLEfile, "wb");
if ($fh == false) { if ($fh == false) {
$this->raiseError("Can't open $OLEfile. It may be in use or protected."); $this->raiseError("Can't open $OLEfile. It may be in use or protected.");
} }
@ -177,8 +174,7 @@ class Spreadsheet_Excel_Writer_OLEwriter extends PEAR
// Set the min file size to 4k to avoid having to use small blocks // Set the min file size to 4k to avoid having to use small blocks
if ($biffsize > 4096) { if ($biffsize > 4096) {
$this->_booksize = $biffsize; $this->_booksize = $biffsize;
} } else {
else {
$this->_booksize = 4096; $this->_booksize = 4096;
} }
//$this->_size_allowed = 1; //$this->_size_allowed = 1;
@ -196,8 +192,7 @@ class Spreadsheet_Excel_Writer_OLEwriter extends PEAR
$datasize = $this->_booksize; $datasize = $this->_booksize;
if ($datasize % 512 == 0) { if ($datasize % 512 == 0) {
$this->_big_blocks = $datasize/512; $this->_big_blocks = $datasize/512;
} } else {
else {
$this->_big_blocks = floor($datasize/512) + 1; $this->_big_blocks = floor($datasize/512) + 1;
} }
// There are 127 list blocks and 1 marker blocks for each big block // There are 127 list blocks and 1 marker blocks for each big block
@ -222,8 +217,7 @@ class Spreadsheet_Excel_Writer_OLEwriter extends PEAR
$this->_writeBigBlockDepot(); $this->_writeBigBlockDepot();
// Close the filehandle // Close the filehandle
fclose($this->_filehandle); fclose($this->_filehandle);
if(($this->_OLEfilename == '-') or ($this->_OLEfilename == '')) if (($this->_OLEfilename == '-') or ($this->_OLEfilename == '')) {
{
$fh = fopen($this->_tmp_filename, "rb"); $fh = fopen($this->_tmp_filename, "rb");
if ($fh == false) { if ($fh == false) {
$this->raiseError("Can't read temporary file."); $this->raiseError("Can't read temporary file.");
@ -242,7 +236,7 @@ class Spreadsheet_Excel_Writer_OLEwriter extends PEAR
*/ */
function write($data) function write($data)
{ {
fwrite($this->_filehandle,$data,strlen($data)); fwrite($this->_filehandle, $data, strlen($data));
} }
@ -267,26 +261,24 @@ class Spreadsheet_Excel_Writer_OLEwriter extends PEAR
$unknown7 = pack("VVV", 0x00, -2 ,0x00); $unknown7 = pack("VVV", 0x00, -2 ,0x00);
$unused = pack("V", -1); $unused = pack("V", -1);
fwrite($this->_filehandle,$id); fwrite($this->_filehandle, $id);
fwrite($this->_filehandle,$unknown1); fwrite($this->_filehandle, $unknown1);
fwrite($this->_filehandle,$unknown2); fwrite($this->_filehandle, $unknown2);
fwrite($this->_filehandle,$unknown3); fwrite($this->_filehandle, $unknown3);
fwrite($this->_filehandle,$unknown4); fwrite($this->_filehandle, $unknown4);
fwrite($this->_filehandle,$unknown5); fwrite($this->_filehandle, $unknown5);
fwrite($this->_filehandle,$num_bbd_blocks); fwrite($this->_filehandle, $num_bbd_blocks);
fwrite($this->_filehandle,$root_startblock); fwrite($this->_filehandle, $root_startblock);
fwrite($this->_filehandle,$unknown6); fwrite($this->_filehandle, $unknown6);
fwrite($this->_filehandle,$sbd_startblock); fwrite($this->_filehandle, $sbd_startblock);
fwrite($this->_filehandle,$unknown7); fwrite($this->_filehandle, $unknown7);
for($i=1; $i <= $num_lists; $i++) for ($i=1; $i <= $num_lists; $i++) {
{
$root_start++; $root_start++;
fwrite($this->_filehandle,pack("V",$root_start)); fwrite($this->_filehandle, pack("V",$root_start));
} }
for($i = $num_lists; $i <=108; $i++) for ($i = $num_lists; $i <=108; $i++) {
{ fwrite($this->_filehandle, $unused);
fwrite($this->_filehandle,$unused);
} }
} }
@ -307,19 +299,16 @@ class Spreadsheet_Excel_Writer_OLEwriter extends PEAR
$end_of_chain = pack("V", -2); $end_of_chain = pack("V", -2);
$unused = pack("V", -1); $unused = pack("V", -1);
for($i=1; $i < $num_blocks; $i++) for ($i=1; $i < $num_blocks; $i++) {
{ fwrite($this->_filehandle, pack("V",$i));
fwrite($this->_filehandle,pack("V",$i));
} }
fwrite($this->_filehandle,$end_of_chain); fwrite($this->_filehandle, $end_of_chain);
fwrite($this->_filehandle,$end_of_chain); fwrite($this->_filehandle, $end_of_chain);
for($i=0; $i < $num_lists; $i++) for ($i=0; $i < $num_lists; $i++) {
{ fwrite($this->_filehandle, $marker);
fwrite($this->_filehandle,$marker);
} }
for($i=$used_blocks; $i <= $total_blocks; $i++) for ($i=$used_blocks; $i <= $total_blocks; $i++) {
{ fwrite($this->_filehandle, $unused);
fwrite($this->_filehandle,$unused);
} }
} }
@ -348,16 +337,14 @@ class Spreadsheet_Excel_Writer_OLEwriter extends PEAR
* @param integer $size size of the property storage. * @param integer $size size of the property storage.
* @access private * @access private
*/ */
function _writePps($name,$type,$dir,$start,$size) function _writePps($name, $type, $dir, $start, $size)
{ {
$length = 0; $length = 0;
$rawname = ''; $rawname = '';
if ($name != '') if ($name != '') {
{
$name = $name . "\0"; $name = $name . "\0";
for($i=0;$i<strlen($name);$i++) for ($i = 0; $i < strlen($name); $i++) {
{
// Simulate a Unicode string // Simulate a Unicode string
$rawname .= pack("H*",dechex(ord($name{$i}))).pack("C",0); $rawname .= pack("H*",dechex(ord($name{$i}))).pack("C",0);
} }
@ -381,25 +368,25 @@ class Spreadsheet_Excel_Writer_OLEwriter extends PEAR
$pps_size = pack("V", $size); // 0x78 $pps_size = pack("V", $size); // 0x78
fwrite($this->_filehandle,$rawname); fwrite($this->_filehandle, $rawname);
for($i=0; $i < (64 -$length); $i++) { for ($i = 0; $i < (64 -$length); $i++) {
fwrite($this->_filehandle,$zero); fwrite($this->_filehandle, $zero);
} }
fwrite($this->_filehandle,$pps_sizeofname); fwrite($this->_filehandle, $pps_sizeofname);
fwrite($this->_filehandle,$pps_type); fwrite($this->_filehandle, $pps_type);
fwrite($this->_filehandle,$pps_prev); fwrite($this->_filehandle, $pps_prev);
fwrite($this->_filehandle,$pps_next); fwrite($this->_filehandle, $pps_next);
fwrite($this->_filehandle,$pps_dir); fwrite($this->_filehandle, $pps_dir);
for($i=0; $i < 5; $i++) { for ($i = 0; $i < 5; $i++) {
fwrite($this->_filehandle,$unknown1); fwrite($this->_filehandle, $unknown1);
} }
fwrite($this->_filehandle,$pps_ts1s); fwrite($this->_filehandle, $pps_ts1s);
fwrite($this->_filehandle,$pps_ts1d); fwrite($this->_filehandle, $pps_ts1d);
fwrite($this->_filehandle,$pps_ts2d); fwrite($this->_filehandle, $pps_ts2d);
fwrite($this->_filehandle,$pps_ts2d); fwrite($this->_filehandle, $pps_ts2d);
fwrite($this->_filehandle,$pps_sb); fwrite($this->_filehandle, $pps_sb);
fwrite($this->_filehandle,$pps_size); fwrite($this->_filehandle, $pps_size);
fwrite($this->_filehandle,$unknown1); fwrite($this->_filehandle, $unknown1);
} }
/** /**
@ -412,15 +399,13 @@ class Spreadsheet_Excel_Writer_OLEwriter extends PEAR
$biffsize = $this->_biffsize; $biffsize = $this->_biffsize;
if ($biffsize < 4096) { if ($biffsize < 4096) {
$min_size = 4096; $min_size = 4096;
} } else {
else {
$min_size = 512; $min_size = 512;
} }
if ($biffsize % $min_size != 0) if ($biffsize % $min_size != 0) {
{
$padding = $min_size - ($biffsize % $min_size); $padding = $min_size - ($biffsize % $min_size);
for($i=0; $i < $padding; $i++) { for ($i = 0; $i < $padding; $i++) {
fwrite($this->_filehandle,"\0"); fwrite($this->_filehandle, "\0");
} }
} }
} }

View File

@ -25,75 +25,75 @@
/** /**
* @const SPREADSHEET_EXCEL_WRITER_ADD token identifier for character "+" * @const SPREADSHEET_EXCEL_WRITER_ADD token identifier for character "+"
*/ */
define('SPREADSHEET_EXCEL_WRITER_ADD',"+"); define('SPREADSHEET_EXCEL_WRITER_ADD', "+");
/** /**
* @const SPREADSHEET_EXCEL_WRITER_SUB token identifier for character "-" * @const SPREADSHEET_EXCEL_WRITER_SUB token identifier for character "-"
*/ */
define('SPREADSHEET_EXCEL_WRITER_SUB',"-"); define('SPREADSHEET_EXCEL_WRITER_SUB', "-");
/** /**
* @const SPREADSHEET_EXCEL_WRITER_MUL token identifier for character "*" * @const SPREADSHEET_EXCEL_WRITER_MUL token identifier for character "*"
*/ */
define('SPREADSHEET_EXCEL_WRITER_MUL',"*"); define('SPREADSHEET_EXCEL_WRITER_MUL', "*");
/** /**
* @const SPREADSHEET_EXCEL_WRITER_DIV token identifier for character "/" * @const SPREADSHEET_EXCEL_WRITER_DIV token identifier for character "/"
*/ */
define('SPREADSHEET_EXCEL_WRITER_DIV',"/"); define('SPREADSHEET_EXCEL_WRITER_DIV', "/");
/** /**
* @const SPREADSHEET_EXCEL_WRITER_OPEN token identifier for character "(" * @const SPREADSHEET_EXCEL_WRITER_OPEN token identifier for character "("
*/ */
define('SPREADSHEET_EXCEL_WRITER_OPEN',"("); define('SPREADSHEET_EXCEL_WRITER_OPEN', "(");
/** /**
* @const SPREADSHEET_EXCEL_WRITER_CLOSE token identifier for character ")" * @const SPREADSHEET_EXCEL_WRITER_CLOSE token identifier for character ")"
*/ */
define('SPREADSHEET_EXCEL_WRITER_CLOSE',")"); define('SPREADSHEET_EXCEL_WRITER_CLOSE', ")");
/** /**
* @const SPREADSHEET_EXCEL_WRITER_COMA token identifier for character "," * @const SPREADSHEET_EXCEL_WRITER_COMA token identifier for character ","
*/ */
define('SPREADSHEET_EXCEL_WRITER_COMA',","); define('SPREADSHEET_EXCEL_WRITER_COMA', ",");
/** /**
* @const SPREADSHEET_EXCEL_WRITER_SEMICOLON token identifier for character ";" * @const SPREADSHEET_EXCEL_WRITER_SEMICOLON token identifier for character ";"
*/ */
define('SPREADSHEET_EXCEL_WRITER_SEMICOLON',";"); define('SPREADSHEET_EXCEL_WRITER_SEMICOLON', ";");
/** /**
* @const SPREADSHEET_EXCEL_WRITER_GT token identifier for character ">" * @const SPREADSHEET_EXCEL_WRITER_GT token identifier for character ">"
*/ */
define('SPREADSHEET_EXCEL_WRITER_GT',">"); define('SPREADSHEET_EXCEL_WRITER_GT', ">");
/** /**
* @const SPREADSHEET_EXCEL_WRITER_LT token identifier for character "<" * @const SPREADSHEET_EXCEL_WRITER_LT token identifier for character "<"
*/ */
define('SPREADSHEET_EXCEL_WRITER_LT',"<"); define('SPREADSHEET_EXCEL_WRITER_LT', "<");
/** /**
* @const SPREADSHEET_EXCEL_WRITER_LE token identifier for character "<=" * @const SPREADSHEET_EXCEL_WRITER_LE token identifier for character "<="
*/ */
define('SPREADSHEET_EXCEL_WRITER_LE',"<="); define('SPREADSHEET_EXCEL_WRITER_LE', "<=");
/** /**
* @const SPREADSHEET_EXCEL_WRITER_GE token identifier for character ">=" * @const SPREADSHEET_EXCEL_WRITER_GE token identifier for character ">="
*/ */
define('SPREADSHEET_EXCEL_WRITER_GE',">="); define('SPREADSHEET_EXCEL_WRITER_GE', ">=");
/** /**
* @const SPREADSHEET_EXCEL_WRITER_EQ token identifier for character "=" * @const SPREADSHEET_EXCEL_WRITER_EQ token identifier for character "="
*/ */
define('SPREADSHEET_EXCEL_WRITER_EQ',"="); define('SPREADSHEET_EXCEL_WRITER_EQ', "=");
/** /**
* @const SPREADSHEET_EXCEL_WRITER_NE token identifier for character "<>" * @const SPREADSHEET_EXCEL_WRITER_NE token identifier for character "<>"
*/ */
define('SPREADSHEET_EXCEL_WRITER_NE',"<>"); define('SPREADSHEET_EXCEL_WRITER_NE', "<>");
require_once('PEAR.php'); require_once 'PEAR.php';
/** /**
* Class for parsing Excel formulas * Class for parsing Excel formulas
@ -538,61 +538,39 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
*/ */
function _convert($token) function _convert($token)
{ {
if (preg_match("/^\"[^\"]{0,255}\"$/", $token)) if (preg_match("/^\"[^\"]{0,255}\"$/", $token)) {
{
return $this->_convertString($token); return $this->_convertString($token);
} } elseif (is_numeric($token)) {
elseif (is_numeric($token))
{
return $this->_convertNumber($token); return $this->_convertNumber($token);
} } elseif (preg_match('/^\$?([A-Ia-i]?[A-Za-z])\$?(\d+)$/',$token)) {
// match references like A1 or $A$1 // match references like A1 or $A$1
elseif (preg_match('/^\$?([A-Ia-i]?[A-Za-z])\$?(\d+)$/',$token))
{
return $this->_convertRef2d($token); return $this->_convertRef2d($token);
} } elseif (preg_match("/^\w+(\:\w+)?\![A-Ia-i]?[A-Za-z](\d+)$/",$token)) {
// match external references like Sheet1!A1 or Sheet1:Sheet2!A1 // match external references like Sheet1!A1 or Sheet1:Sheet2!A1
elseif (preg_match("/^\w+(\:\w+)?\![A-Ia-i]?[A-Za-z](\d+)$/",$token))
{
return $this->_convertRef3d($token); return $this->_convertRef3d($token);
} } elseif (preg_match("/^'\w+(\:\w+)?'\![A-Ia-i]?[A-Za-z](\d+)$/",$token)) {
// match external references like Sheet1!A1 or Sheet1:Sheet2!A1 // match external references like Sheet1!A1 or Sheet1:Sheet2!A1
elseif (preg_match("/^'\w+(\:\w+)?'\![A-Ia-i]?[A-Za-z](\d+)$/",$token))
{
return $this->_convertRef3d($token); return $this->_convertRef3d($token);
} } elseif (preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?(\d+)\:(\$)?[A-Ia-i]?[A-Za-z](\$)?(\d+)$/",$token)) {
// match ranges like A1:B2 // match ranges like A1:B2
elseif (preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?(\d+)\:(\$)?[A-Ia-i]?[A-Za-z](\$)?(\d+)$/",$token))
{
return $this->_convertRange2d($token); return $this->_convertRange2d($token);
} } elseif (preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?(\d+)\.\.(\$)?[A-Ia-i]?[A-Za-z](\$)?(\d+)$/",$token)) {
// match ranges like A1..B2 // match ranges like A1..B2
elseif (preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?(\d+)\.\.(\$)?[A-Ia-i]?[A-Za-z](\$)?(\d+)$/",$token))
{
return $this->_convertRange2d($token); return $this->_convertRange2d($token);
} } elseif (preg_match("/^\w+(\:\w+)?\!([A-Ia-i]?[A-Za-z])?(\d+)\:([A-Ia-i]?[A-Za-z])?(\d+)$/",$token)) {
// match external ranges like Sheet1!A1 or Sheet1:Sheet2!A1:B2 // match external ranges like Sheet1!A1 or Sheet1:Sheet2!A1:B2
elseif (preg_match("/^\w+(\:\w+)?\!([A-Ia-i]?[A-Za-z])?(\d+)\:([A-Ia-i]?[A-Za-z])?(\d+)$/",$token))
{
return $this->_convertRange3d($token); return $this->_convertRange3d($token);
} } elseif (preg_match("/^'\w+(\:\w+)?'\!([A-Ia-i]?[A-Za-z])?(\d+)\:([A-Ia-i]?[A-Za-z])?(\d+)$/",$token)) {
// match external ranges like 'Sheet1'!A1 or 'Sheet1:Sheet2'!A1:B2 // match external ranges like 'Sheet1'!A1 or 'Sheet1:Sheet2'!A1:B2
elseif (preg_match("/^'\w+(\:\w+)?'\!([A-Ia-i]?[A-Za-z])?(\d+)\:([A-Ia-i]?[A-Za-z])?(\d+)$/",$token))
{
return $this->_convertRange3d($token); return $this->_convertRange3d($token);
} } elseif (isset($this->ptg[$token])) {
elseif (isset($this->ptg[$token])) // operators (including parentheses) // operators (including parentheses)
{
return pack("C", $this->ptg[$token]); return pack("C", $this->ptg[$token]);
} /*} elseif (preg_match("/[A-Z0-9\xc0-\xdc\.]+/",$token)) {
// commented so argument number can be processed correctly. See toReversePolish(). // commented so argument number can be processed correctly. See toReversePolish().
/*elseif (preg_match("/[A-Z0-9\xc0-\xdc\.]+/",$token)) return($this->_convertFunction($token,$this->_func_args));*/
{ } elseif ($token == 'arg') {
return($this->_convertFunction($token,$this->_func_args));
}*/
// if it's an argument, ignore the token (the argument remains) // if it's an argument, ignore the token (the argument remains)
elseif ($token == 'arg')
{
return ''; return '';
} }
// TODO: use real error codes // TODO: use real error codes
@ -610,9 +588,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
// Integer in the range 0..2**16-1 // Integer in the range 0..2**16-1
if ((preg_match("/^\d+$/",$num)) and ($num <= 65535)) { if ((preg_match("/^\d+$/",$num)) and ($num <= 65535)) {
return pack("Cv", $this->ptg['ptgInt'], $num); return pack("Cv", $this->ptg['ptgInt'], $num);
} } else { // A float
else // A float
{
if ($this->_byte_order) { // if it's Big Endian if ($this->_byte_order) { // if it's Big Endian
$num = strrev($num); $num = strrev($num);
} }
@ -637,8 +613,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
} }
if ($this->_BIFF_version == 0x0500) { if ($this->_BIFF_version == 0x0500) {
return pack("CC", $this->ptg['ptgStr'], strlen($string)).$string; return pack("CC", $this->ptg['ptgStr'], strlen($string)).$string;
} } elseif ($this->_BIFF_version == 0x0600) {
elseif ($this->_BIFF_version == 0x0600) {
$encoding = 0; // TODO: Unicode support $encoding = 0; // TODO: Unicode support
return pack("CCC", $this->ptg['ptgStr'], strlen($string), $encoding).$string; return pack("CCC", $this->ptg['ptgStr'], strlen($string), $encoding).$string;
} }
@ -681,12 +656,10 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
// Split the range into 2 cell refs // Split the range into 2 cell refs
if (preg_match("/^([A-Ia-i]?[A-Za-z])(\d+)\:([A-Ia-i]?[A-Za-z])(\d+)$/",$range)) { if (preg_match("/^([A-Ia-i]?[A-Za-z])(\d+)\:([A-Ia-i]?[A-Za-z])(\d+)$/",$range)) {
list($cell1, $cell2) = split(':', $range); list($cell1, $cell2) = split(':', $range);
} } elseif (preg_match("/^([A-Ia-i]?[A-Za-z])(\d+)\.\.([A-Ia-i]?[A-Za-z])(\d+)$/",$range)) {
elseif (preg_match("/^([A-Ia-i]?[A-Za-z])(\d+)\.\.([A-Ia-i]?[A-Za-z])(\d+)$/",$range)) {
list($cell1, $cell2) = split('\.\.', $range); list($cell1, $cell2) = split('\.\.', $range);
} } else {
else {
// TODO: use real error codes // TODO: use real error codes
return $this->raiseError("Unknown range separator", 0, PEAR_ERROR_DIE); return $this->raiseError("Unknown range separator", 0, PEAR_ERROR_DIE);
} }
@ -706,14 +679,11 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
// The ptg value depends on the class of the ptg. // The ptg value depends on the class of the ptg.
if ($class == 0) { if ($class == 0) {
$ptgArea = pack("C", $this->ptg['ptgArea']); $ptgArea = pack("C", $this->ptg['ptgArea']);
} } elseif ($class == 1) {
elseif ($class == 1) {
$ptgArea = pack("C", $this->ptg['ptgAreaV']); $ptgArea = pack("C", $this->ptg['ptgAreaV']);
} } elseif ($class == 2) {
elseif ($class == 2) {
$ptgArea = pack("C", $this->ptg['ptgAreaA']); $ptgArea = pack("C", $this->ptg['ptgAreaA']);
} } else {
else {
// TODO: use real error codes // TODO: use real error codes
return $this->raiseError("Unknown class $class", 0, PEAR_ERROR_DIE); return $this->raiseError("Unknown class $class", 0, PEAR_ERROR_DIE);
} }
@ -741,8 +711,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
if (PEAR::isError($ext_ref)) { if (PEAR::isError($ext_ref)) {
return $ext_ref; return $ext_ref;
} }
} } elseif ($this->_BIFF_version == 0x0600) {
elseif ($this->_BIFF_version == 0x0600) {
$ext_ref = $this->_getRefIndex($ext_ref); $ext_ref = $this->_getRefIndex($ext_ref);
if (PEAR::isError($ext_ref)) { if (PEAR::isError($ext_ref)) {
return $ext_ref; return $ext_ref;
@ -753,8 +722,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
list($cell1, $cell2) = split(':', $range); list($cell1, $cell2) = split(':', $range);
// Convert the cell references // Convert the cell references
if (preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?(\d+)$/", $cell1)) if (preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?(\d+)$/", $cell1)) {
{
$cell_array1 = $this->_cellToPackedRowcol($cell1); $cell_array1 = $this->_cellToPackedRowcol($cell1);
if (PEAR::isError($cell_array1)) { if (PEAR::isError($cell_array1)) {
return $cell_array1; return $cell_array1;
@ -765,8 +733,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
return $cell_array2; return $cell_array2;
} }
list($row2, $col2) = $cell_array2; list($row2, $col2) = $cell_array2;
} } else { // It's a rows range (like 26:27)
else { // It's a rows range (like 26:27)
$cells_array = $this->_rangeToPackedRange($cell1.':'.$cell2); $cells_array = $this->_rangeToPackedRange($cell1.':'.$cell2);
if (PEAR::isError($cells_array)) { if (PEAR::isError($cells_array)) {
return $cells_array; return $cells_array;
@ -777,14 +744,11 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
// The ptg value depends on the class of the ptg. // The ptg value depends on the class of the ptg.
if ($class == 0) { if ($class == 0) {
$ptgArea = pack("C", $this->ptg['ptgArea3d']); $ptgArea = pack("C", $this->ptg['ptgArea3d']);
} } elseif ($class == 1) {
elseif ($class == 1) {
$ptgArea = pack("C", $this->ptg['ptgArea3dV']); $ptgArea = pack("C", $this->ptg['ptgArea3dV']);
} } elseif ($class == 2) {
elseif ($class == 2) {
$ptgArea = pack("C", $this->ptg['ptgArea3dA']); $ptgArea = pack("C", $this->ptg['ptgArea3dA']);
} } else {
else {
return $this->raiseError("Unknown class $class", 0, PEAR_ERROR_DIE); return $this->raiseError("Unknown class $class", 0, PEAR_ERROR_DIE);
} }
@ -812,14 +776,11 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
// The ptg value depends on the class of the ptg. // The ptg value depends on the class of the ptg.
if ($class == 0) { if ($class == 0) {
$ptgRef = pack("C", $this->ptg['ptgRef']); $ptgRef = pack("C", $this->ptg['ptgRef']);
} } elseif ($class == 1) {
elseif ($class == 1) {
$ptgRef = pack("C", $this->ptg['ptgRefV']); $ptgRef = pack("C", $this->ptg['ptgRefV']);
} } elseif ($class == 2) {
elseif ($class == 2) {
$ptgRef = pack("C", $this->ptg['ptgRefA']); $ptgRef = pack("C", $this->ptg['ptgRefA']);
} } else {
else {
// TODO: use real error codes // TODO: use real error codes
return $this->raiseError("Unknown class $class"); return $this->raiseError("Unknown class $class");
} }
@ -847,8 +808,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
if (PEAR::isError($ext_ref)) { if (PEAR::isError($ext_ref)) {
return $ext_ref; return $ext_ref;
} }
} } elseif ($this->_BIFF_version == 0x0600) {
elseif ($this->_BIFF_version == 0x0600) {
$ext_ref = $this->_getRefIndex($ext_ref); $ext_ref = $this->_getRefIndex($ext_ref);
if (PEAR::isError($ext_ref)) { if (PEAR::isError($ext_ref)) {
return $ext_ref; return $ext_ref;
@ -861,14 +821,11 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
// The ptg value depends on the class of the ptg. // The ptg value depends on the class of the ptg.
if ($class == 0) { if ($class == 0) {
$ptgRef = pack("C", $this->ptg['ptgRef3d']); $ptgRef = pack("C", $this->ptg['ptgRef3d']);
} } elseif ($class == 1) {
elseif ($class == 1) {
$ptgRef = pack("C", $this->ptg['ptgRef3dV']); $ptgRef = pack("C", $this->ptg['ptgRef3dV']);
} } elseif ($class == 2) {
elseif ($class == 2) {
$ptgRef = pack("C", $this->ptg['ptgRef3dA']); $ptgRef = pack("C", $this->ptg['ptgRef3dA']);
} } else {
else {
return $this->raiseError("Unknown class $class", 0, PEAR_ERROR_DIE); return $this->raiseError("Unknown class $class", 0, PEAR_ERROR_DIE);
} }
@ -889,8 +846,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
$ext_ref = preg_replace("/'$/", '', $ext_ref); // Remove trailing ' if any. $ext_ref = preg_replace("/'$/", '', $ext_ref); // Remove trailing ' if any.
// Check if there is a sheet range eg., Sheet1:Sheet2. // Check if there is a sheet range eg., Sheet1:Sheet2.
if (preg_match("/:/", $ext_ref)) if (preg_match("/:/", $ext_ref)) {
{
list($sheet_name1, $sheet_name2) = split(':', $ext_ref); list($sheet_name1, $sheet_name2) = split(':', $ext_ref);
$sheet1 = $this->_getSheetIndex($sheet_name1); $sheet1 = $this->_getSheetIndex($sheet_name1);
@ -906,9 +862,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
if ($sheet1 > $sheet2) { if ($sheet1 > $sheet2) {
list($sheet1, $sheet2) = array($sheet2, $sheet1); list($sheet1, $sheet2) = array($sheet2, $sheet1);
} }
} } else { // Single sheet name only.
else // Single sheet name only.
{
$sheet1 = $this->_getSheetIndex($ext_ref); $sheet1 = $this->_getSheetIndex($ext_ref);
if ($sheet1 == -1) { if ($sheet1 == -1) {
return $this->raiseError("Unknown sheet name $ext_ref in formula"); return $this->raiseError("Unknown sheet name $ext_ref in formula");
@ -938,8 +892,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
$ext_ref = preg_replace("/'$/", '', $ext_ref); // Remove trailing ' if any. $ext_ref = preg_replace("/'$/", '', $ext_ref); // Remove trailing ' if any.
// Check if there is a sheet range eg., Sheet1:Sheet2. // Check if there is a sheet range eg., Sheet1:Sheet2.
if (preg_match("/:/", $ext_ref)) if (preg_match("/:/", $ext_ref)) {
{
list($sheet_name1, $sheet_name2) = split(':', $ext_ref); list($sheet_name1, $sheet_name2) = split(':', $ext_ref);
$sheet1 = $this->_getSheetIndex($sheet_name1); $sheet1 = $this->_getSheetIndex($sheet_name1);
@ -955,9 +908,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
if ($sheet1 > $sheet2) { if ($sheet1 > $sheet2) {
list($sheet1, $sheet2) = array($sheet2, $sheet1); list($sheet1, $sheet2) = array($sheet2, $sheet1);
} }
} } else { // Single sheet name only.
else // Single sheet name only.
{
$sheet1 = $this->_getSheetIndex($ext_ref); $sheet1 = $this->_getSheetIndex($ext_ref);
if ($sheet1 == -1) { if ($sheet1 == -1) {
return $this->raiseError("Unknown sheet name $ext_ref in formula"); return $this->raiseError("Unknown sheet name $ext_ref in formula");
@ -970,16 +921,14 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
$ref = pack('vvv', $supbook_index, $sheet1, $sheet2); $ref = pack('vvv', $supbook_index, $sheet1, $sheet2);
$total_references = count($this->_references); $total_references = count($this->_references);
$index = -1; $index = -1;
for ($i = 0; $i < $total_references; $i++) for ($i = 0; $i < $total_references; $i++) {
{
if ($ref == $this->_references[$i]) { if ($ref == $this->_references[$i]) {
$index = $i; $index = $i;
break; break;
} }
} }
// if REF was not found add it to references array // if REF was not found add it to references array
if ($index == -1) if ($index == -1) {
{
$this->_references[$total_references] = $ref; $this->_references[$total_references] = $ref;
$index = $total_references; $index = $total_references;
} }
@ -999,8 +948,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
{ {
if (!isset($this->_ext_sheets[$sheet_name])) { if (!isset($this->_ext_sheets[$sheet_name])) {
return -1; return -1;
} } else {
else {
return $this->_ext_sheets[$sheet_name]; return $this->_ext_sheets[$sheet_name];
} }
} }
@ -1044,8 +992,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
$row |= $col_rel << 14; $row |= $col_rel << 14;
$row |= $row_rel << 15; $row |= $row_rel << 15;
$col = pack('C', $col); $col = pack('C', $col);
} } elseif ($this->_BIFF_version == 0x0600) {
elseif ($this->_BIFF_version == 0x0600) {
$col |= $col_rel << 14; $col |= $col_rel << 14;
$col |= $row_rel << 15; $col |= $row_rel << 15;
$col = pack('v', $col); $col = pack('v', $col);
@ -1089,8 +1036,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
$row2 |= $row2_rel << 15; $row2 |= $row2_rel << 15;
$col1 = pack('C', $col1); $col1 = pack('C', $col1);
$col2 = pack('C', $col2); $col2 = pack('C', $col2);
} } elseif ($this->_BIFF_version == 0x0600) {
elseif ($this->_BIFF_version == 0x0600) {
$col1 |= $row1_rel << 15; $col1 |= $row1_rel << 15;
$col2 |= $row2_rel << 15; $col2 |= $row2_rel << 15;
$col1 = pack('v', $col1); $col1 = pack('v', $col1);
@ -1123,8 +1069,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
// Convert base26 column string to a number. // Convert base26 column string to a number.
$expn = strlen($col_ref) - 1; $expn = strlen($col_ref) - 1;
$col = 0; $col = 0;
for ($i=0; $i < strlen($col_ref); $i++) for ($i = 0; $i < strlen($col_ref); $i++) {
{
$col += (ord($col_ref{$i}) - ord('A') + 1) * pow(26, $expn); $col += (ord($col_ref{$i}) - ord('A') + 1) * pow(26, $expn);
$expn--; $expn--;
} }
@ -1145,8 +1090,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
{ {
$i = $this->_current_char; $i = $this->_current_char;
// eat up white spaces // eat up white spaces
if ($i < strlen($this->_formula)) if ($i < strlen($this->_formula)) {
{
while ($this->_formula{$i} == " ") { while ($this->_formula{$i} == " ") {
$i++; $i++;
} }
@ -1155,17 +1099,14 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
} }
$token = ""; $token = "";
} }
while ($i < strlen($this->_formula)) while ($i < strlen($this->_formula)) {
{
$token .= $this->_formula{$i}; $token .= $this->_formula{$i};
if ($i < strlen($this->_formula) - 1) { if ($i < strlen($this->_formula) - 1) {
$this->_lookahead = $this->_formula{$i+1}; $this->_lookahead = $this->_formula{$i+1};
} } else {
else {
$this->_lookahead = ''; $this->_lookahead = '';
} }
if ($this->_match($token) != '') if ($this->_match($token) != '') {
{
//if ($i < strlen($this->_formula) - 1) { //if ($i < strlen($this->_formula) - 1) {
// $this->_lookahead = $this->_formula{$i+1}; // $this->_lookahead = $this->_formula{$i+1};
//} //}
@ -1175,9 +1116,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
} }
if ($i < strlen($this->_formula) - 2) { if ($i < strlen($this->_formula) - 2) {
$this->_lookahead = $this->_formula{$i+2}; $this->_lookahead = $this->_formula{$i+2};
} } else { // if we run out of characters _lookahead becomes empty
// if we run out of characters _lookahead becomes empty
else {
$this->_lookahead = ''; $this->_lookahead = '';
} }
$i++; $i++;
@ -1194,8 +1133,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
*/ */
function _match($token) function _match($token)
{ {
switch($token) switch($token) {
{
case SPREADSHEET_EXCEL_WRITER_ADD: case SPREADSHEET_EXCEL_WRITER_ADD:
return $token; return $token;
break; break;
@ -1247,66 +1185,56 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
break; break;
default: default:
// if it's a reference // if it's a reference
if (preg_match('/^\$?[A-Ia-i]?[A-Za-z]\$?[0-9]+$/',$token) and if (preg_match('/^\$?[A-Ia-i]?[A-Za-z]\$?[0-9]+$/', $token) &&
!ereg("[0-9]",$this->_lookahead) and !ereg("[0-9]", $this->_lookahead) &&
($this->_lookahead != ':') and ($this->_lookahead != '.') and ($this->_lookahead != ':') && ($this->_lookahead != '.') &&
($this->_lookahead != '!')) ($this->_lookahead != '!'))
{ {
return $token; return $token;
} } elseif (preg_match("/^\w+(\:\w+)?\![A-Ia-i]?[A-Za-z][0-9]+$/", $token) &&
// If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1) !ereg("[0-9]", $this->_lookahead) &&
elseif (preg_match("/^\w+(\:\w+)?\![A-Ia-i]?[A-Za-z][0-9]+$/",$token) and ($this->_lookahead != ':') && ($this->_lookahead != '.'))
!ereg("[0-9]",$this->_lookahead) and
($this->_lookahead != ':') and ($this->_lookahead != '.'))
{ {
return $token;
}
// If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1) // If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1)
elseif (preg_match("/^'\w+(\:\w+)?'\![A-Ia-i]?[A-Za-z][0-9]+$/",$token) and
!ereg("[0-9]",$this->_lookahead) and
($this->_lookahead != ':') and ($this->_lookahead != '.'))
{
return $token; return $token;
} } elseif (preg_match("/^'\w+(\:\w+)?'\![A-Ia-i]?[A-Za-z][0-9]+$/", $token) &&
!ereg("[0-9]", $this->_lookahead) &&
($this->_lookahead != ':') && ($this->_lookahead != '.'))
{
// If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1)
return $token;
} elseif (preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+:(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+$/", $token) &&
!ereg("[0-9]", $this->_lookahead))
{
// if it's a range (A1:A2) // if it's a range (A1:A2)
elseif (preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+:(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+$/",$token) and
!ereg("[0-9]",$this->_lookahead))
{
return $token; return $token;
} } elseif (preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+\.\.(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+$/", $token) &&
!ereg("[0-9]", $this->_lookahead))
{
// if it's a range (A1..A2) // if it's a range (A1..A2)
elseif (preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+\.\.(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+$/",$token) and
!ereg("[0-9]",$this->_lookahead))
{
return $token; return $token;
} } elseif (preg_match("/^\w+(\:\w+)?\!([A-Ia-i]?[A-Za-z])?[0-9]+:([A-Ia-i]?[A-Za-z])?[0-9]+$/", $token) &&
!ereg("[0-9]", $this->_lookahead))
{
// If it's an external range like Sheet1!A1 or Sheet1:Sheet2!A1:B2 // If it's an external range like Sheet1!A1 or Sheet1:Sheet2!A1:B2
elseif (preg_match("/^\w+(\:\w+)?\!([A-Ia-i]?[A-Za-z])?[0-9]+:([A-Ia-i]?[A-Za-z])?[0-9]+$/",$token) and
!ereg("[0-9]",$this->_lookahead))
{
return $token; return $token;
} } elseif (preg_match("/^'\w+(\:\w+)?'\!([A-Ia-i]?[A-Za-z])?[0-9]+:([A-Ia-i]?[A-Za-z])?[0-9]+$/", $token) &&
!ereg("[0-9]", $this->_lookahead))
{
// If it's an external range like 'Sheet1'!A1 or 'Sheet1:Sheet2'!A1:B2 // If it's an external range like 'Sheet1'!A1 or 'Sheet1:Sheet2'!A1:B2
elseif (preg_match("/^'\w+(\:\w+)?'\!([A-Ia-i]?[A-Za-z])?[0-9]+:([A-Ia-i]?[A-Za-z])?[0-9]+$/",$token) and
!ereg("[0-9]",$this->_lookahead))
{
return $token; return $token;
} } elseif (is_numeric($token) &&
(!is_numeric($token.$this->_lookahead) || ($this->_lookahead == '')) &&
($this->_lookahead != '!') && ($this->_lookahead != ':'))
{
// If it's a number (check that it's not a sheet name or range) // If it's a number (check that it's not a sheet name or range)
elseif (is_numeric($token) and
(!is_numeric($token.$this->_lookahead) or ($this->_lookahead == '')) and
($this->_lookahead != '!') and ($this->_lookahead != ':'))
{
return $token; return $token;
} } elseif (ereg("^\"[^\"]{0,255}\"$", $token)) {
// If it's a string (of maximum 255 characters) // If it's a string (of maximum 255 characters)
elseif (ereg("^\"[^\"]{0,255}\"$",$token))
{
return $token; return $token;
} } elseif (eregi("^[A-Z0-9\xc0-\xdc\.]+$", $token) && ($this->_lookahead == "("))
// if it's a function call
elseif (eregi("^[A-Z0-9\xc0-\xdc\.]+$",$token) and ($this->_lookahead == "("))
{ {
// if it's a function call
return $token; return $token;
} }
return ''; return '';
@ -1347,53 +1275,42 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
if (PEAR::isError($result)) { if (PEAR::isError($result)) {
return $result; return $result;
} }
if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_LT) if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_LT) {
{
$this->_advance(); $this->_advance();
$result2 = $this->_expression(); $result2 = $this->_expression();
if (PEAR::isError($result2)) { if (PEAR::isError($result2)) {
return $result2; return $result2;
} }
$result = $this->_createTree('ptgLT', $result, $result2); $result = $this->_createTree('ptgLT', $result, $result2);
} } elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_GT) {
elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_GT)
{
$this->_advance(); $this->_advance();
$result2 = $this->_expression(); $result2 = $this->_expression();
if (PEAR::isError($result2)) { if (PEAR::isError($result2)) {
return $result2; return $result2;
} }
$result = $this->_createTree('ptgGT', $result, $result2); $result = $this->_createTree('ptgGT', $result, $result2);
} } elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_LE) {
elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_LE)
{
$this->_advance(); $this->_advance();
$result2 = $this->_expression(); $result2 = $this->_expression();
if (PEAR::isError($result2)) { if (PEAR::isError($result2)) {
return $result2; return $result2;
} }
$result = $this->_createTree('ptgLE', $result, $result2); $result = $this->_createTree('ptgLE', $result, $result2);
} } elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_GE) {
elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_GE)
{
$this->_advance(); $this->_advance();
$result2 = $this->_expression(); $result2 = $this->_expression();
if (PEAR::isError($result2)) { if (PEAR::isError($result2)) {
return $result2; return $result2;
} }
$result = $this->_createTree('ptgGE', $result, $result2); $result = $this->_createTree('ptgGE', $result, $result2);
} } elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_EQ) {
elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_EQ)
{
$this->_advance(); $this->_advance();
$result2 = $this->_expression(); $result2 = $this->_expression();
if (PEAR::isError($result2)) { if (PEAR::isError($result2)) {
return $result2; return $result2;
} }
$result = $this->_createTree('ptgEQ', $result, $result2); $result = $this->_createTree('ptgEQ', $result, $result2);
} } elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_NE) {
elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_NE)
{
$this->_advance(); $this->_advance();
$result2 = $this->_expression(); $result2 = $this->_expression();
if (PEAR::isError($result2)) { if (PEAR::isError($result2)) {
@ -1420,9 +1337,8 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
$result = $this->_createTree($this->_current_token, '', ''); $result = $this->_createTree($this->_current_token, '', '');
$this->_advance(); $this->_advance();
return $result; return $result;
} } elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_SUB) {
// catch "-" Term // catch "-" Term
elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_SUB) {
$this->_advance(); $this->_advance();
$result2 = $this->_expression(); $result2 = $this->_expression();
$result = $this->_createTree('ptgUminus', $result2, ''); $result = $this->_createTree('ptgUminus', $result2, '');
@ -1432,20 +1348,17 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
if (PEAR::isError($result)) { if (PEAR::isError($result)) {
return $result; return $result;
} }
while (($this->_current_token == SPREADSHEET_EXCEL_WRITER_ADD) or while (($this->_current_token == SPREADSHEET_EXCEL_WRITER_ADD) ||
($this->_current_token == SPREADSHEET_EXCEL_WRITER_SUB)) ($this->_current_token == SPREADSHEET_EXCEL_WRITER_SUB))
{ {
if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_ADD) if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_ADD) {
{
$this->_advance(); $this->_advance();
$result2 = $this->_term(); $result2 = $this->_term();
if (PEAR::isError($result2)) { if (PEAR::isError($result2)) {
return $result2; return $result2;
} }
$result = $this->_createTree('ptgAdd', $result, $result2); $result = $this->_createTree('ptgAdd', $result, $result2);
} } else {
else
{
$this->_advance(); $this->_advance();
$result2 = $this->_term(); $result2 = $this->_term();
if (PEAR::isError($result2)) { if (PEAR::isError($result2)) {
@ -1484,7 +1397,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
if (PEAR::isError($result)) { if (PEAR::isError($result)) {
return $result; return $result;
} }
while (($this->_current_token == SPREADSHEET_EXCEL_WRITER_MUL) or while (($this->_current_token == SPREADSHEET_EXCEL_WRITER_MUL) ||
($this->_current_token == SPREADSHEET_EXCEL_WRITER_DIV)) ($this->_current_token == SPREADSHEET_EXCEL_WRITER_DIV))
{ {
if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_MUL) if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_MUL)
@ -1495,9 +1408,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
return $result2; return $result2;
} }
$result = $this->_createTree('ptgMul', $result, $result2); $result = $this->_createTree('ptgMul', $result, $result2);
} } else {
else
{
$this->_advance(); $this->_advance();
$result2 = $this->_fact(); $result2 = $this->_fact();
if (PEAR::isError($result2)) { if (PEAR::isError($result2)) {
@ -1522,8 +1433,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
*/ */
function _fact() function _fact()
{ {
if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_OPEN) if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_OPEN) {
{
$this->_advance(); // eat the "(" $this->_advance(); // eat the "("
$result = $this->_parenthesizedExpression(); $result = $this->_parenthesizedExpression();
if ($this->_current_token != SPREADSHEET_EXCEL_WRITER_CLOSE) { if ($this->_current_token != SPREADSHEET_EXCEL_WRITER_CLOSE) {
@ -1533,57 +1443,43 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
return $result; return $result;
} }
// if it's a reference // if it's a reference
if (preg_match('/^\$?[A-Ia-i]?[A-Za-z]\$?[0-9]+$/',$this->_current_token)) if (preg_match('/^\$?[A-Ia-i]?[A-Za-z]\$?[0-9]+$/', $this->_current_token)) {
{
$result = $this->_createTree($this->_current_token, '', ''); $result = $this->_createTree($this->_current_token, '', '');
$this->_advance(); $this->_advance();
return $result; return $result;
} } elseif (preg_match("/^\w+(\:\w+)?\![A-Ia-i]?[A-Za-z][0-9]+$/", $this->_current_token)) {
// If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1) // If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1)
elseif (preg_match("/^\w+(\:\w+)?\![A-Ia-i]?[A-Za-z][0-9]+$/",$this->_current_token))
{
$result = $this->_createTree($this->_current_token, '', ''); $result = $this->_createTree($this->_current_token, '', '');
$this->_advance(); $this->_advance();
return $result; return $result;
} } elseif (preg_match("/^'\w+(\:\w+)?'\![A-Ia-i]?[A-Za-z][0-9]+$/", $this->_current_token)) {
// If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1) // If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1)
elseif (preg_match("/^'\w+(\:\w+)?'\![A-Ia-i]?[A-Za-z][0-9]+$/",$this->_current_token))
{
$result = $this->_createTree($this->_current_token, '', ''); $result = $this->_createTree($this->_current_token, '', '');
$this->_advance(); $this->_advance();
return $result; return $result;
} } elseif (preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+:(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+$/", $this->_current_token) ||
preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+\.\.(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+$/", $this->_current_token))
{
// if it's a range // if it's a range
elseif (preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+:(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+$/",$this->_current_token) or
preg_match("/^(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+\.\.(\$)?[A-Ia-i]?[A-Za-z](\$)?[0-9]+$/",$this->_current_token))
{
$result = $this->_current_token; $result = $this->_current_token;
$this->_advance(); $this->_advance();
return $result; return $result;
} } elseif (preg_match("/^\w+(\:\w+)?\!([A-Ia-i]?[A-Za-z])?[0-9]+:([A-Ia-i]?[A-Za-z])?[0-9]+$/", $this->_current_token)) {
// If it's an external range (Sheet1!A1 or Sheet1!A1:B2) // If it's an external range (Sheet1!A1 or Sheet1!A1:B2)
elseif (preg_match("/^\w+(\:\w+)?\!([A-Ia-i]?[A-Za-z])?[0-9]+:([A-Ia-i]?[A-Za-z])?[0-9]+$/",$this->_current_token))
{
$result = $this->_current_token; $result = $this->_current_token;
$this->_advance(); $this->_advance();
return $result; return $result;
} } elseif (preg_match("/^'\w+(\:\w+)?'\!([A-Ia-i]?[A-Za-z])?[0-9]+:([A-Ia-i]?[A-Za-z])?[0-9]+$/",$this->_current_token)) {
// If it's an external range ('Sheet1'!A1 or 'Sheet1'!A1:B2) // If it's an external range ('Sheet1'!A1 or 'Sheet1'!A1:B2)
elseif (preg_match("/^'\w+(\:\w+)?'\!([A-Ia-i]?[A-Za-z])?[0-9]+:([A-Ia-i]?[A-Za-z])?[0-9]+$/",$this->_current_token))
{
$result = $this->_current_token; $result = $this->_current_token;
$this->_advance(); $this->_advance();
return $result; return $result;
} } elseif (is_numeric($this->_current_token)) {
elseif (is_numeric($this->_current_token))
{
$result = $this->_createTree($this->_current_token, '', ''); $result = $this->_createTree($this->_current_token, '', '');
$this->_advance(); $this->_advance();
return $result; return $result;
} } elseif (eregi("^[A-Z0-9\xc0-\xdc\.]+$",$this->_current_token)) {
// if it's a function call // if it's a function call
elseif (eregi("^[A-Z0-9\xc0-\xdc\.]+$",$this->_current_token))
{
$result = $this->_func(); $result = $this->_func();
return $result; return $result;
} }
@ -1605,16 +1501,13 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
$function = $this->_current_token; $function = $this->_current_token;
$this->_advance(); $this->_advance();
$this->_advance(); // eat the "(" $this->_advance(); // eat the "("
while ($this->_current_token != ')') while ($this->_current_token != ')') {
{ if ($num_args > 0) {
if ($num_args > 0)
{
if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_COMA || if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_COMA ||
$this->_current_token == SPREADSHEET_EXCEL_WRITER_SEMICOLON) $this->_current_token == SPREADSHEET_EXCEL_WRITER_SEMICOLON)
{ {
$this->_advance(); // eat the "," or ";" $this->_advance(); // eat the "," or ";"
} } else {
else {
return $this->raiseError("Syntax error: comma expected in ". return $this->raiseError("Syntax error: comma expected in ".
"function $function, arg #{$num_args}"); "function $function, arg #{$num_args}");
} }
@ -1623,9 +1516,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
return $result2; return $result2;
} }
$result = $this->_createTree('arg', $result, $result2); $result = $this->_createTree('arg', $result, $result2);
} } else { // first argument
else // first argument
{
$result2 = $this->_condition(); $result2 = $this->_condition();
if (PEAR::isError($result2)) { if (PEAR::isError($result2)) {
return $result2; return $result2;
@ -1690,36 +1581,29 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
function toReversePolish($tree = array()) function toReversePolish($tree = array())
{ {
$polish = ""; // the string we are going to return $polish = ""; // the string we are going to return
if (empty($tree)) // If it's the first call use _parse_tree if (empty($tree)) { // If it's the first call use _parse_tree
{
$tree = $this->_parse_tree; $tree = $this->_parse_tree;
} }
if (is_array($tree['left'])) if (is_array($tree['left'])) {
{
$converted_tree = $this->toReversePolish($tree['left']); $converted_tree = $this->toReversePolish($tree['left']);
if (PEAR::isError($converted_tree)) { if (PEAR::isError($converted_tree)) {
return $converted_tree; return $converted_tree;
} }
$polish .= $converted_tree; $polish .= $converted_tree;
} } elseif ($tree['left'] != '') { // It's a final node
elseif ($tree['left'] != '') // It's a final node
{
$converted_tree = $this->_convert($tree['left']); $converted_tree = $this->_convert($tree['left']);
if (PEAR::isError($converted_tree)) { if (PEAR::isError($converted_tree)) {
return $converted_tree; return $converted_tree;
} }
$polish .= $converted_tree; $polish .= $converted_tree;
} }
if (is_array($tree['right'])) if (is_array($tree['right'])) {
{
$converted_tree = $this->toReversePolish($tree['right']); $converted_tree = $this->toReversePolish($tree['right']);
if (PEAR::isError($converted_tree)) { if (PEAR::isError($converted_tree)) {
return $converted_tree; return $converted_tree;
} }
$polish .= $converted_tree; $polish .= $converted_tree;
} } elseif ($tree['right'] != '') { // It's a final node
elseif ($tree['right'] != '') // It's a final node
{
$converted_tree = $this->_convert($tree['right']); $converted_tree = $this->_convert($tree['right']);
if (PEAR::isError($converted_tree)) { if (PEAR::isError($converted_tree)) {
return $converted_tree; return $converted_tree;
@ -1727,17 +1611,16 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
$polish .= $converted_tree; $polish .= $converted_tree;
} }
// if it's a function convert it here (so we can set it's arguments) // if it's a function convert it here (so we can set it's arguments)
if (preg_match("/^[A-Z0-9\xc0-\xdc\.]+$/",$tree['value']) and if (preg_match("/^[A-Z0-9\xc0-\xdc\.]+$/",$tree['value']) &&
!preg_match('/^([A-Ia-i]?[A-Za-z])(\d+)$/',$tree['value']) and !preg_match('/^([A-Ia-i]?[A-Za-z])(\d+)$/',$tree['value']) &&
!preg_match("/^[A-Ia-i]?[A-Za-z](\d+)\.\.[A-Ia-i]?[A-Za-z](\d+)$/",$tree['value']) and !preg_match("/^[A-Ia-i]?[A-Za-z](\d+)\.\.[A-Ia-i]?[A-Za-z](\d+)$/",$tree['value']) &&
!is_numeric($tree['value']) and !is_numeric($tree['value']) &&
!isset($this->ptg[$tree['value']])) !isset($this->ptg[$tree['value']]))
{ {
// left subtree for a function is always an array. // left subtree for a function is always an array.
if ($tree['left'] != '') { if ($tree['left'] != '') {
$left_tree = $this->toReversePolish($tree['left']); $left_tree = $this->toReversePolish($tree['left']);
} } else {
else {
$left_tree = ''; $left_tree = '';
} }
if (PEAR::isError($left_tree)) { if (PEAR::isError($left_tree)) {
@ -1745,9 +1628,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
} }
// add it's left subtree and return. // add it's left subtree and return.
return $left_tree.$this->_convertFunction($tree['value'], $tree['right']); return $left_tree.$this->_convertFunction($tree['value'], $tree['right']);
} } else {
else
{
$converted_tree = $this->_convert($tree['value']); $converted_tree = $this->_convert($tree['value']);
if (PEAR::isError($converted_tree)) { if (PEAR::isError($converted_tree)) {
return $converted_tree; return $converted_tree;

View File

@ -154,16 +154,21 @@ class Spreadsheet_Excel_Writer_Validator
{ {
$options = $this->_type; $options = $this->_type;
$options |= $this->_style << 3; $options |= $this->_style << 3;
if($this->_fixedList) if ($this->_fixedList) {
$options |= 0x80; $options |= 0x80;
if($this->_blank) }
if ($this->_blank) {
$options |= 0x100; $options |= 0x100;
if(!$this->_incell) }
if (!$this->_incell) {
$options |= 0x200; $options |= 0x200;
if($this->_showprompt) }
if ($this->_showprompt) {
$options |= 0x40000; $options |= 0x40000;
if($this->_showerror) }
if ($this->_showerror) {
$options |= 0x80000; $options |= 0x80000;
}
$options |= $this->_operator << 20; $options |= $this->_operator << 20;
return $options; return $options;

View File

@ -32,12 +32,12 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
require_once('Spreadsheet/Excel/Writer/Format.php'); require_once 'Spreadsheet/Excel/Writer/Format.php';
require_once('Spreadsheet/Excel/Writer/BIFFwriter.php'); require_once 'Spreadsheet/Excel/Writer/BIFFwriter.php';
require_once('Spreadsheet/Excel/Writer/Worksheet.php'); require_once 'Spreadsheet/Excel/Writer/Worksheet.php';
require_once('Spreadsheet/Excel/Writer/Parser.php'); require_once 'Spreadsheet/Excel/Writer/Parser.php';
require_once('OLE/PPS/Root.php'); require_once 'OLE/PPS/Root.php';
require_once('OLE/PPS/File.php'); require_once 'OLE/PPS/File.php';
/** /**
* Class for generating Excel Spreadsheets * Class for generating Excel Spreadsheets
@ -327,8 +327,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
// Check that the worksheet name doesn't already exist: a fatal Excel error. // Check that the worksheet name doesn't already exist: a fatal Excel error.
$total_worksheets = count($this->_worksheets); $total_worksheets = count($this->_worksheets);
for ($i=0; $i < $total_worksheets; $i++) for ($i = 0; $i < $total_worksheets; $i++) {
{
if ($name == $this->_worksheets[$i]->getName()) { if ($name == $this->_worksheets[$i]->getName()) {
return $this->raiseError("Worksheet '$name' already exists"); return $this->raiseError("Worksheet '$name' already exists");
} }
@ -357,7 +356,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
*/ */
function &addFormat($properties = array()) function &addFormat($properties = array())
{ {
$format = new Spreadsheet_Excel_Writer_Format($this->_BIFF_version, $this->_xf_index,$properties); $format = new Spreadsheet_Excel_Writer_Format($this->_BIFF_version, $this->_xf_index, $properties);
$this->_xf_index += 1; $this->_xf_index += 1;
$this->_formats[] = &$format; $this->_formats[] = &$format;
return $format; return $format;
@ -371,7 +370,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
*/ */
function &addValidator() function &addValidator()
{ {
include_once('Spreadsheet/Excel/Writer/Validator.php'); include_once 'Spreadsheet/Excel/Writer/Validator.php';
/* FIXME: check for successful inclusion*/ /* FIXME: check for successful inclusion*/
$valid = new Spreadsheet_Excel_Writer_Validator($this->_parser); $valid = new Spreadsheet_Excel_Writer_Validator($this->_parser);
return $valid; return $valid;
@ -387,7 +386,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
* @param integer $blue blue RGB value [0-255] * @param integer $blue blue RGB value [0-255]
* @return integer The palette index for the custom color * @return integer The palette index for the custom color
*/ */
function setCustomColor($index,$red,$green,$blue) function setCustomColor($index, $red, $green, $blue)
{ {
// Match a HTML #xxyyzz style parameter // Match a HTML #xxyyzz style parameter
/*if (defined $_[1] and $_[1] =~ /^#(\w\w)(\w\w)(\w\w)/ ) { /*if (defined $_[1] and $_[1] =~ /^#(\w\w)(\w\w)(\w\w)/ ) {
@ -401,9 +400,9 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
} }
// Check that the colour components are in the right range // Check that the colour components are in the right range
if ( ($red < 0 or $red > 255) or if (($red < 0 or $red > 255) ||
($green < 0 or $green > 255) or ($green < 0 or $green > 255) ||
($blue < 0 or $blue > 255) ) ($blue < 0 or $blue > 255))
{ {
return $this->raiseError("Color component outside range: 0 <= color <= 255"); return $this->raiseError("Color component outside range: 0 <= color <= 255");
} }
@ -499,7 +498,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
// Calculate the number of selected worksheet tabs and call the finalization // Calculate the number of selected worksheet tabs and call the finalization
// methods for each worksheet // methods for each worksheet
$total_worksheets = count($this->_worksheets); $total_worksheets = count($this->_worksheets);
for ($i=0; $i < $total_worksheets; $i++) { for ($i = 0; $i < $total_worksheets; $i++) {
if ($this->_worksheets[$i]->selected) { if ($this->_worksheets[$i]->selected) {
$this->_selected++; $this->_selected++;
} }
@ -528,7 +527,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
$this->_calcSheetOffsets(); $this->_calcSheetOffsets();
// Add BOUNDSHEET records // Add BOUNDSHEET records
for ($i=0; $i < $total_worksheets; $i++) { for ($i = 0; $i < $total_worksheets; $i++) {
$this->_storeBoundsheet($this->_worksheets[$i]->name,$this->_worksheets[$i]->offset); $this->_storeBoundsheet($this->_worksheets[$i]->name,$this->_worksheets[$i]->offset);
} }
@ -589,8 +588,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
} }
$OLE->append($this->_data); $OLE->append($this->_data);
$total_worksheets = count($this->_worksheets); $total_worksheets = count($this->_worksheets);
for ($i = 0; $i < $total_worksheets; $i++) for ($i = 0; $i < $total_worksheets; $i++) {
{
while ($tmp = $this->_worksheets[$i]->getData()) { while ($tmp = $this->_worksheets[$i]->getData()) {
$OLE->append($tmp); $OLE->append($tmp);
} }
@ -615,8 +613,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
{ {
if ($this->_BIFF_version == 0x0600) { if ($this->_BIFF_version == 0x0600) {
$boundsheet_length = 12; // fixed length for a BOUNDSHEET record $boundsheet_length = 12; // fixed length for a BOUNDSHEET record
} } else {
else {
$boundsheet_length = 11; $boundsheet_length = 11;
} }
$EOF = 4; $EOF = 4;
@ -634,12 +631,12 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
} }
$total_worksheets = count($this->_worksheets); $total_worksheets = count($this->_worksheets);
// add the length of the BOUNDSHEET records // add the length of the BOUNDSHEET records
for ($i=0; $i < $total_worksheets; $i++) { for ($i = 0; $i < $total_worksheets; $i++) {
$offset += $boundsheet_length + strlen($this->_worksheets[$i]->name); $offset += $boundsheet_length + strlen($this->_worksheets[$i]->name);
} }
$offset += $EOF; $offset += $EOF;
for ($i=0; $i < $total_worksheets; $i++) { for ($i = 0; $i < $total_worksheets; $i++) {
$this->_worksheets[$i]->offset = $offset; $this->_worksheets[$i]->offset = $offset;
$offset += $this->_worksheets[$i]->_datasize; $offset += $this->_worksheets[$i]->_datasize;
} }
@ -660,7 +657,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
// Note: Fonts are 0-indexed. According to the SDK there is no index 4, // Note: Fonts are 0-indexed. According to the SDK there is no index 4,
// so the following fonts are 0, 1, 2, 3, 5 // so the following fonts are 0, 1, 2, 3, 5
// //
for ($i=1; $i <= 5; $i++){ for ($i = 1; $i <= 5; $i++){
$this->_append($font); $this->_append($font);
} }
@ -674,14 +671,12 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
$fonts[$key] = 0; // Index of the default font $fonts[$key] = 0; // Index of the default font
$total_formats = count($this->_formats); $total_formats = count($this->_formats);
for ($i=0; $i < $total_formats; $i++) for ($i = 0; $i < $total_formats; $i++) {
{
$key = $this->_formats[$i]->getFontKey(); $key = $this->_formats[$i]->getFontKey();
if (isset($fonts[$key])) { if (isset($fonts[$key])) {
// FONT has already been used // FONT has already been used
$this->_formats[$i]->font_index = $fonts[$key]; $this->_formats[$i]->font_index = $fonts[$key];
} } else {
else {
// Add a new FONT record // Add a new FONT record
$fonts[$key] = $index; $fonts[$key] = $index;
$this->_formats[$i]->font_index = $index; $this->_formats[$i]->font_index = $index;
@ -707,17 +702,15 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
// Iterate through the XF objects and write a FORMAT record if it isn't a // Iterate through the XF objects and write a FORMAT record if it isn't a
// built-in format type and if the FORMAT string hasn't already been used. // built-in format type and if the FORMAT string hasn't already been used.
$total_formats = count($this->_formats); $total_formats = count($this->_formats);
for ($i=0; $i < $total_formats; $i++) for ($i = 0; $i < $total_formats; $i++) {
{
$num_format = $this->_formats[$i]->_num_format; $num_format = $this->_formats[$i]->_num_format;
// Check if $num_format is an index to a built-in format. // Check if $num_format is an index to a built-in format.
// Also check for a string of zeros, which is a valid format string // Also check for a string of zeros, which is a valid format string
// but would evaluate to zero. // but would evaluate to zero.
// //
if (!preg_match("/^0+\d/",$num_format)) if (!preg_match("/^0+\d/", $num_format)) {
{ if (preg_match("/^\d+$/", $num_format)) { // built-in format
if (preg_match("/^\d+$/",$num_format)) { // built-in format
continue; continue;
} }
} }
@ -725,8 +718,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
if (isset($hash_num_formats[$num_format])) { if (isset($hash_num_formats[$num_format])) {
// FORMAT has already been used // FORMAT has already been used
$this->_formats[$i]->_num_format = $hash_num_formats[$num_format]; $this->_formats[$i]->_num_format = $hash_num_formats[$num_format];
} } else{
else{
// Add a new FORMAT // Add a new FORMAT
$hash_num_formats[$num_format] = $index; $hash_num_formats[$num_format] = $index;
$this->_formats[$i]->_num_format = $index; $this->_formats[$i]->_num_format = $index;
@ -754,7 +746,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
// The default font index is 0 // The default font index is 0
// //
$format = $this->_tmp_format; $format = $this->_tmp_format;
for ($i=0; $i <= 14; $i++) { for ($i = 0; $i <= 14; $i++) {
$xf = $format->getXf('style'); // Style XF $xf = $format->getXf('style'); // Style XF
$this->_append($xf); $this->_append($xf);
} }
@ -764,7 +756,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
// User defined XFs // User defined XFs
$total_formats = count($this->_formats); $total_formats = count($this->_formats);
for ($i=0; $i < $total_formats; $i++) { for ($i = 0; $i < $total_formats; $i++) {
$xf = $this->_formats[$i]->getXf('cell'); $xf = $this->_formats[$i]->getXf('cell');
$this->_append($xf); $this->_append($xf);
} }
@ -808,8 +800,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
$total_worksheets = count($this->_worksheets); $total_worksheets = count($this->_worksheets);
for ($i = 0; $i < $total_worksheets; $i++) { for ($i = 0; $i < $total_worksheets; $i++) {
// Write a Name record if the print area has been defined // Write a Name record if the print area has been defined
if (isset($this->_worksheets[$i]->print_rowmin)) if (isset($this->_worksheets[$i]->print_rowmin)) {
{
$this->_storeNameShort( $this->_storeNameShort(
$this->_worksheets[$i]->index, $this->_worksheets[$i]->index,
0x06, // NAME type 0x06, // NAME type
@ -832,7 +823,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
// Determine if row + col, row, col or nothing has been defined // Determine if row + col, row, col or nothing has been defined
// and write the appropriate record // and write the appropriate record
// //
if (isset($rowmin) and isset($colmin)) { if (isset($rowmin) && isset($colmin)) {
// Row and column titles have been defined. // Row and column titles have been defined.
// Row title has been defined. // Row title has been defined.
$this->_storeNameLong( $this->_storeNameLong(
@ -843,8 +834,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
$colmin, $colmin,
$colmax $colmax
); );
} } elseif (isset($rowmin)) {
elseif (isset($rowmin)) {
// Row title has been defined. // Row title has been defined.
$this->_storeNameShort( $this->_storeNameShort(
$this->_worksheets[$i]->index, $this->_worksheets[$i]->index,
@ -854,8 +844,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
0x00, 0x00,
0xff 0xff
); );
} } elseif (isset($colmin)) {
elseif (isset($colmin)) {
// Column title has been defined. // Column title has been defined.
$this->_storeNameShort( $this->_storeNameShort(
$this->_worksheets[$i]->index, $this->_worksheets[$i]->index,
@ -865,8 +854,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
$colmin, $colmin,
$colmax $colmax
); );
} } else {
else {
// Print title hasn't been defined. // Print title hasn't been defined.
} }
} }
@ -941,8 +929,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
$record = 0x0085; // Record identifier $record = 0x0085; // Record identifier
if ($this->_BIFF_version == 0x0600) { if ($this->_BIFF_version == 0x0600) {
$length = 0x08 + strlen($sheetname); // Number of bytes to follow $length = 0x08 + strlen($sheetname); // Number of bytes to follow
} } else {
else {
$length = 0x07 + strlen($sheetname); // Number of bytes to follow $length = 0x07 + strlen($sheetname); // Number of bytes to follow
} }
@ -952,8 +939,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
$header = pack("vv", $record, $length); $header = pack("vv", $record, $length);
if ($this->_BIFF_version == 0x0600) { if ($this->_BIFF_version == 0x0600) {
$data = pack("Vvv", $offset, $grbit, $cch); $data = pack("Vvv", $offset, $grbit, $cch);
} } else {
else {
$data = pack("VvC", $offset, $grbit, $cch); $data = pack("VvC", $offset, $grbit, $cch);
} }
$this->_append($header.$data.$sheetname); $this->_append($header.$data.$sheetname);
@ -1030,8 +1016,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
if ($this->_BIFF_version == 0x0600) { if ($this->_BIFF_version == 0x0600) {
$length = 5 + strlen($format); // Number of bytes to follow $length = 5 + strlen($format); // Number of bytes to follow
$encoding = 0x0; $encoding = 0x0;
} } elseif ($this->_BIFF_version == 0x0500) {
elseif ($this->_BIFF_version == 0x0500) {
$length = 3 + strlen($format); // Number of bytes to follow $length = 3 + strlen($format); // Number of bytes to follow
} }
@ -1040,8 +1025,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
$header = pack("vv", $record, $length); $header = pack("vv", $record, $length);
if ($this->_BIFF_version == 0x0600) { if ($this->_BIFF_version == 0x0600) {
$data = pack("vvC", $ifmt, $cch, $encoding); $data = pack("vvC", $ifmt, $cch, $encoding);
} } elseif ($this->_BIFF_version == 0x0500) {
elseif ($this->_BIFF_version == 0x0500) {
$data = pack("vC", $ifmt, $cch); $data = pack("vC", $ifmt, $cch);
} }
$this->_append($header.$data.$format); $this->_append($header.$data.$format);
@ -1292,8 +1276,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
$data = ''; // The RGB data $data = ''; // The RGB data
// Pack the RGB data // Pack the RGB data
foreach($aref as $color) foreach($aref as $color) {
{
foreach($color as $byte) { foreach($color as $byte) {
$data .= pack("C",$byte); $data .= pack("C",$byte);
} }
@ -1372,13 +1355,10 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
// split string fits exactly into the remaining space. // split string fits exactly into the remaining space.
if ($block_length > 0) { if ($block_length > 0) {
$continue = 1; $continue = 1;
} } else {
else {
$continue = 0; $continue = 0;
} }
} else {
}
else {
// Store the max size for this block // Store the max size for this block
$this->_block_sizes[] = $written + $continue; $this->_block_sizes[] = $written + $continue;
@ -1393,8 +1373,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
// one or more CONTINUE blocks // one or more CONTINUE blocks
if ($block_length < $continue_limit) { if ($block_length < $continue_limit) {
$written = $block_length; $written = $block_length;
} } else {
else {
$written = 0; $written = 0;
} }
} }
@ -1504,12 +1483,10 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
// //
if ($block_length > 0) { if ($block_length > 0) {
$continue = 1; $continue = 1;
} } else {
else {
$continue = 0; $continue = 0;
} }
} } else {
else {
// Not enough space to start the string in the current block // Not enough space to start the string in the current block
$block_length -= $continue_limit - $space_remaining - $continue; $block_length -= $continue_limit - $space_remaining - $continue;
$continue = 0; $continue = 0;
@ -1533,8 +1510,7 @@ class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwri
if ($block_length < $continue_limit) { if ($block_length < $continue_limit) {
$this->_append($string); $this->_append($string);
$written = $block_length; $written = $block_length;
} } else {
else {
$written = 0; $written = 0;
} }
} }

View File

@ -32,8 +32,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
require_once('Spreadsheet/Excel/Writer/Parser.php'); require_once 'Spreadsheet/Excel/Writer/Parser.php';
require_once('Spreadsheet/Excel/Writer/BIFFwriter.php'); require_once 'Spreadsheet/Excel/Writer/BIFFwriter.php';
/** /**
* Class for generating Excel Spreadsheets * Class for generating Excel Spreadsheets
@ -470,8 +470,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
if ( $fh) { if ( $fh) {
// Store filehandle // Store filehandle
$this->_filehandle = $fh; $this->_filehandle = $fh;
} } else {
else {
// If tmpfile() fails store data in memory // If tmpfile() fails store data in memory
$this->_using_tmpfile = false; $this->_using_tmpfile = false;
} }
@ -568,9 +567,8 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
} }
// Prepend the COLINFO records if they exist // Prepend the COLINFO records if they exist
if (!empty($this->_colinfo)) if (!empty($this->_colinfo)) {
{ for ($i = 0; $i < count($this->_colinfo); $i++) {
for ($i=0; $i < count($this->_colinfo); $i++) {
$this->_storeColinfo($this->_colinfo[$i]); $this->_storeColinfo($this->_colinfo[$i]);
} }
$this->_storeDefcol(); $this->_storeDefcol();
@ -621,8 +619,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$buffer = 4096; $buffer = 4096;
// Return data stored in memory // Return data stored in memory
if (isset($this->_data)) if (isset($this->_data)) {
{
$tmp = $this->_data; $tmp = $this->_data;
unset($this->_data); unset($this->_data);
$fh = $this->_filehandle; $fh = $this->_filehandle;
@ -632,8 +629,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
return $tmp; return $tmp;
} }
// Return data stored on disk // Return data stored on disk
if ($this->_using_tmpfile) if ($this->_using_tmpfile) {
{
if ($tmp = fread($this->_filehandle, $buffer)) { if ($tmp = fread($this->_filehandle, $buffer)) {
return $tmp; return $tmp;
} }
@ -654,7 +650,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
*/ */
function setMerge($first_row, $first_col, $last_row, $last_col) function setMerge($first_row, $first_col, $last_row, $last_col)
{ {
if (($last_row < $first_row) or ($last_col < $first_col)) { if (($last_row < $first_row) || ($last_col < $first_col)) {
return; return;
} }
// don't check rowmin, rowmax, etc... because we don't know when this // don't check rowmin, rowmax, etc... because we don't know when this
@ -965,8 +961,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$this->title_rowmin = $first_row; $this->title_rowmin = $first_row;
if (isset($last_row)) { //Second row is optional if (isset($last_row)) { //Second row is optional
$this->title_rowmax = $last_row; $this->title_rowmax = $last_row;
} } else {
else {
$this->title_rowmax = $first_row; $this->title_rowmax = $first_row;
} }
} }
@ -983,8 +978,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$this->title_colmin = $first_col; $this->title_colmin = $first_col;
if (isset($last_col)) { // Second col is optional if (isset($last_col)) { // Second col is optional
$this->title_colmax = $last_col; $this->title_colmax = $last_col;
} } else {
else {
$this->title_colmax = $first_col; $this->title_colmax = $first_col;
} }
} }
@ -1092,8 +1086,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
function setZoom($scale = 100) function setZoom($scale = 100)
{ {
// Confine the scale to Excel's range // Confine the scale to Excel's range
if ($scale < 10 or $scale > 400) if ($scale < 10 || $scale > 400) {
{
$this->raiseError("Zoom factor $scale outside range: 10 <= zoom <= 400"); $this->raiseError("Zoom factor $scale outside range: 10 <= zoom <= 400");
$scale = 100; $scale = 100;
} }
@ -1111,8 +1104,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
function setPrintScale($scale = 100) function setPrintScale($scale = 100)
{ {
// Confine the scale to Excel's range // Confine the scale to Excel's range
if ($scale < 10 or $scale > 400) if ($scale < 10 || $scale > 400) {
{
$this->raiseError("Print scale $scale outside range: 10 <= zoom <= 400"); $this->raiseError("Print scale $scale outside range: 10 <= zoom <= 400");
$scale = 100; $scale = 100;
} }
@ -1139,37 +1131,29 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
@_ = $this->_substituteCellref(@_); @_ = $this->_substituteCellref(@_);
}*/ }*/
// Match number
if (preg_match("/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/",$token)) { if (preg_match("/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/",$token)) {
// Match number
return $this->writeNumber($row,$col,$token,$format); return $this->writeNumber($row,$col,$token,$format);
} } elseif (preg_match("/^[fh]tt?p:\/\//",$token)) {
// Match http or ftp URL // Match http or ftp URL
elseif (preg_match("/^[fh]tt?p:\/\//",$token)) {
return $this->writeUrl($row, $col, $token, '', $format); return $this->writeUrl($row, $col, $token, '', $format);
} } elseif (preg_match("/^mailto:/",$token)) {
// Match mailto: // Match mailto:
elseif (preg_match("/^mailto:/",$token)) {
return $this->writeUrl($row, $col, $token, '', $format); return $this->writeUrl($row, $col, $token, '', $format);
} } elseif (preg_match("/^(?:in|ex)ternal:/",$token)) {
// Match internal or external sheet link // Match internal or external sheet link
elseif (preg_match("/^(?:in|ex)ternal:/",$token)) {
return $this->writeUrl($row, $col, $token, '', $format); return $this->writeUrl($row, $col, $token, '', $format);
} } elseif (preg_match("/^=/",$token)) {
// Match formula // Match formula
elseif (preg_match("/^=/",$token)) {
return $this->writeFormula($row, $col, $token, $format); return $this->writeFormula($row, $col, $token, $format);
} } elseif (preg_match("/^@/",$token)) {
// Match formula // Match formula
elseif (preg_match("/^@/",$token)) {
return $this->writeFormula($row, $col, $token, $format); return $this->writeFormula($row, $col, $token, $format);
} } elseif ($token == '') {
// Match blank // Match blank
elseif ($token == '') {
return $this->writeBlank($row,$col,$format); return $this->writeBlank($row,$col,$format);
} } else {
// Default: match string // Default: match string
else {
return $this->writeString($row,$col,$token,$format); return $this->writeString($row,$col,$token,$format);
} }
} }
@ -1239,8 +1223,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
{ {
if ($format != 0) { if ($format != 0) {
return($format->getXfIndex()); return($format->getXfIndex());
} } else {
else {
return(0x0F); return(0x0F);
} }
} }
@ -1262,16 +1245,14 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
*/ */
function _append($data) function _append($data)
{ {
if ($this->_using_tmpfile) if ($this->_using_tmpfile) {
{
// Add CONTINUE records if necessary // Add CONTINUE records if necessary
if (strlen($data) > $this->_limit) { if (strlen($data) > $this->_limit) {
$data = $this->_addContinue($data); $data = $this->_addContinue($data);
} }
fwrite($this->_filehandle,$data); fwrite($this->_filehandle, $data);
$this->_datasize += strlen($data); $this->_datasize += strlen($data);
} } else {
else {
parent::_append($data); parent::_append($data);
} }
} }
@ -1291,21 +1272,21 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$cell = strtoupper($cell); $cell = strtoupper($cell);
// Convert a column range: 'A:A' or 'B:G' // Convert a column range: 'A:A' or 'B:G'
if (preg_match("/([A-I]?[A-Z]):([A-I]?[A-Z])/",$cell,$match)) { if (preg_match("/([A-I]?[A-Z]):([A-I]?[A-Z])/", $cell, $match)) {
list($no_use, $col1) = $this->_cellToRowcol($match[1] .'1'); // Add a dummy row list($no_use, $col1) = $this->_cellToRowcol($match[1] .'1'); // Add a dummy row
list($no_use, $col2) = $this->_cellToRowcol($match[2] .'1'); // Add a dummy row list($no_use, $col2) = $this->_cellToRowcol($match[2] .'1'); // Add a dummy row
return(array($col1, $col2)); return(array($col1, $col2));
} }
// Convert a cell range: 'A1:B7' // Convert a cell range: 'A1:B7'
if (preg_match("/\$?([A-I]?[A-Z]\$?\d+):\$?([A-I]?[A-Z]\$?\d+)/",$cell,$match)) { if (preg_match("/\$?([A-I]?[A-Z]\$?\d+):\$?([A-I]?[A-Z]\$?\d+)/", $cell, $match)) {
list($row1, $col1) = $this->_cellToRowcol($match[1]); list($row1, $col1) = $this->_cellToRowcol($match[1]);
list($row2, $col2) = $this->_cellToRowcol($match[2]); list($row2, $col2) = $this->_cellToRowcol($match[2]);
return(array($row1, $col1, $row2, $col2)); return(array($row1, $col1, $row2, $col2));
} }
// Convert a cell reference: 'A1' or 'AD2000' // Convert a cell reference: 'A1' or 'AD2000'
if (preg_match("/\$?([A-I]?[A-Z]\$?\d+)/",$cell)) { if (preg_match("/\$?([A-I]?[A-Z]\$?\d+)/", $cell)) {
list($row1, $col1) = $this->_cellToRowcol($match[1]); list($row1, $col1) = $this->_cellToRowcol($match[1]);
return(array($row1, $col1)); return(array($row1, $col1));
} }
@ -1360,8 +1341,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
// split the plain text password in its component characters // split the plain text password in its component characters
$chars = preg_split('//', $plaintext, -1, PREG_SPLIT_NO_EMPTY); $chars = preg_split('//', $plaintext, -1, PREG_SPLIT_NO_EMPTY);
foreach($chars as $char) foreach($chars as $char) {
{
$value = ord($char) << $i; // shifted ASCII value $value = ord($char) << $i; // shifted ASCII value
$rotated_bits = $value >> 15; // rotated bits beyond bit 15 $rotated_bits = $value >> 15; // rotated bits beyond bit 15
$value &= 0x7fff; // first 15 bits $value &= 0x7fff; // first 15 bits
@ -1427,36 +1407,29 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$xf = $this->_XF($format); // The cell format $xf = $this->_XF($format); // The cell format
// Check that row and col are valid and store max and min values // Check that row and col are valid and store max and min values
if ($row >= $this->_xls_rowmax) if ($row >= $this->_xls_rowmax) {
{
return(-2); return(-2);
} }
if ($col >= $this->_xls_colmax) if ($col >= $this->_xls_colmax) {
{
return(-2); return(-2);
} }
if ($row < $this->_dim_rowmin) if ($row < $this->_dim_rowmin) {
{
$this->_dim_rowmin = $row; $this->_dim_rowmin = $row;
} }
if ($row > $this->_dim_rowmax) if ($row > $this->_dim_rowmax) {
{
$this->_dim_rowmax = $row; $this->_dim_rowmax = $row;
} }
if ($col < $this->_dim_colmin) if ($col < $this->_dim_colmin) {
{
$this->_dim_colmin = $col; $this->_dim_colmin = $col;
} }
if ($col > $this->_dim_colmax) if ($col > $this->_dim_colmax) {
{
$this->_dim_colmax = $col; $this->_dim_colmax = $col;
} }
$header = pack("vv", $record, $length); $header = pack("vv", $record, $length);
$data = pack("vvv", $row, $col, $xf); $data = pack("vvv", $row, $col, $xf);
$xl_double = pack("d", $num); $xl_double = pack("d", $num);
if ($this->_byte_order) // if it's Big Endian if ($this->_byte_order) { // if it's Big Endian
{
$xl_double = strrev($xl_double); $xl_double = strrev($xl_double);
} }
@ -1492,33 +1465,26 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$str_error = 0; $str_error = 0;
// Check that row and col are valid and store max and min values // Check that row and col are valid and store max and min values
if ($row >= $this->_xls_rowmax) if ($row >= $this->_xls_rowmax) {
{
return(-2); return(-2);
} }
if ($col >= $this->_xls_colmax) if ($col >= $this->_xls_colmax) {
{
return(-2); return(-2);
} }
if ($row < $this->_dim_rowmin) if ($row < $this->_dim_rowmin) {
{
$this->_dim_rowmin = $row; $this->_dim_rowmin = $row;
} }
if ($row > $this->_dim_rowmax) if ($row > $this->_dim_rowmax) {
{
$this->_dim_rowmax = $row; $this->_dim_rowmax = $row;
} }
if ($col < $this->_dim_colmin) if ($col < $this->_dim_colmin) {
{
$this->_dim_colmin = $col; $this->_dim_colmin = $col;
} }
if ($col > $this->_dim_colmax) if ($col > $this->_dim_colmax) {
{
$this->_dim_colmax = $col; $this->_dim_colmax = $col;
} }
if ($strlen > $this->_xls_strmax) // LABEL must be < 255 chars if ($strlen > $this->_xls_strmax) { // LABEL must be < 255 chars
{
$str = substr($str, 0, $this->_xls_strmax); $str = substr($str, 0, $this->_xls_strmax);
$length = 0x0008 + $this->_xls_strmax; $length = 0x0008 + $this->_xls_strmax;
$strlen = $this->_xls_strmax; $strlen = $this->_xls_strmax;
@ -1610,28 +1576,22 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
//$length = 0x0006 + $note_length; // Bytes to follow //$length = 0x0006 + $note_length; // Bytes to follow
// Check that row and col are valid and store max and min values // Check that row and col are valid and store max and min values
if ($row >= $this->_xls_rowmax) if ($row >= $this->_xls_rowmax) {
{
return(-2); return(-2);
} }
if ($col >= $this->_xls_colmax) if ($col >= $this->_xls_colmax) {
{
return(-2); return(-2);
} }
if ($row < $this->_dim_rowmin) if ($row < $this->_dim_rowmin) {
{
$this->_dim_rowmin = $row; $this->_dim_rowmin = $row;
} }
if ($row > $this->_dim_rowmax) if ($row > $this->_dim_rowmax) {
{
$this->_dim_rowmax = $row; $this->_dim_rowmax = $row;
} }
if ($col < $this->_dim_colmin) if ($col < $this->_dim_colmin) {
{
$this->_dim_colmin = $col; $this->_dim_colmin = $col;
} }
if ($col > $this->_dim_colmax) if ($col > $this->_dim_colmax) {
{
$this->_dim_colmax = $col; $this->_dim_colmax = $col;
} }
@ -1641,8 +1601,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$data = pack("vvv", $row, $col, $note_length); $data = pack("vvv", $row, $col, $note_length);
$this->_append($header.$data.substr($note, 0, 2048)); $this->_append($header.$data.substr($note, 0, 2048));
for($i = $max_length; $i < $note_length; $i += $max_length) for($i = $max_length; $i < $note_length; $i += $max_length) {
{
$chunk = substr($note, $i, $max_length); $chunk = substr($note, $i, $max_length);
$length = 0x0006 + strlen($chunk); $length = 0x0006 + strlen($chunk);
$header = pack("vv", $record, $length); $header = pack("vv", $record, $length);
@ -1672,8 +1631,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
function writeBlank($row, $col, $format) function writeBlank($row, $col, $format)
{ {
// Don't write a blank cell unless it has a format // Don't write a blank cell unless it has a format
if ($format == 0) if ($format == 0) {
{
return(0); return(0);
} }
@ -1682,28 +1640,22 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$xf = $this->_XF($format); // The cell format $xf = $this->_XF($format); // The cell format
// Check that row and col are valid and store max and min values // Check that row and col are valid and store max and min values
if ($row >= $this->_xls_rowmax) if ($row >= $this->_xls_rowmax) {
{
return(-2); return(-2);
} }
if ($col >= $this->_xls_colmax) if ($col >= $this->_xls_colmax) {
{
return(-2); return(-2);
} }
if ($row < $this->_dim_rowmin) if ($row < $this->_dim_rowmin) {
{
$this->_dim_rowmin = $row; $this->_dim_rowmin = $row;
} }
if ($row > $this->_dim_rowmax) if ($row > $this->_dim_rowmax) {
{
$this->_dim_rowmax = $row; $this->_dim_rowmax = $row;
} }
if ($col < $this->_dim_colmin) if ($col < $this->_dim_colmin) {
{
$this->_dim_colmin = $col; $this->_dim_colmin = $col;
} }
if ($col > $this->_dim_colmax) if ($col > $this->_dim_colmax) {
{
$this->_dim_colmax = $col; $this->_dim_colmax = $col;
} }
@ -1752,12 +1704,9 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
// Strip the '=' or '@' sign at the beginning of the formula string // Strip the '=' or '@' sign at the beginning of the formula string
if (preg_match("/^=/",$formula)) { if (preg_match("/^=/",$formula)) {
$formula = preg_replace("/(^=)/","",$formula); $formula = preg_replace("/(^=)/","",$formula);
} } elseif (preg_match("/^@/",$formula)) {
elseif (preg_match("/^@/",$formula)) {
$formula = preg_replace("/(^@)/","",$formula); $formula = preg_replace("/(^@)/","",$formula);
} } else {
else
{
// Error handling // Error handling
$this->writeString($row, $col, 'Unrecognised character for formula'); $this->writeString($row, $col, 'Unrecognised character for formula');
return -1; return -1;
@ -1765,15 +1714,13 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
// Parse the formula using the parser in Parser.php // Parse the formula using the parser in Parser.php
$error = $this->_parser->parse($formula); $error = $this->_parser->parse($formula);
if ($this->isError($error)) if ($this->isError($error)) {
{
$this->writeString($row, $col, $error->getMessage()); $this->writeString($row, $col, $error->getMessage());
return -1; return -1;
} }
$formula = $this->_parser->toReversePolish(); $formula = $this->_parser->toReversePolish();
if ($this->isError($formula)) if ($this->isError($formula)) {
{
$this->writeString($row, $col, $formula->getMessage()); $this->writeString($row, $col, $formula->getMessage());
return -1; return -1;
} }
@ -1880,7 +1827,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$str = $url; $str = $url;
} }
$str_error = $this->writeString($row1, $col1, $str, $format); $str_error = $this->writeString($row1, $col1, $str, $format);
if (($str_error == -2) or ($str_error == -3)) { if (($str_error == -2) || ($str_error == -3)) {
return $str_error; return $str_error;
} }
@ -1943,7 +1890,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$str = $url; $str = $url;
} }
$str_error = $this->writeString($row1, $col1, $str, $format); $str_error = $this->writeString($row1, $col1, $str, $format);
if (($str_error == -2) or ($str_error == -3)) { if (($str_error == -2) || ($str_error == -3)) {
return $str_error; return $str_error;
} }
@ -2017,7 +1964,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$str = preg_replace('[\#]', ' - ', $url); $str = preg_replace('[\#]', ' - ', $url);
} }
$str_error = $this->writeString($row1, $col1, $str, $format); $str_error = $this->writeString($row1, $col1, $str, $format);
if (($str_error == -2) or ($str_error == -3)) { if (($str_error == -2) || ($str_error == -3)) {
return $str_error; return $str_error;
} }
@ -2131,8 +2078,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
// Use setRow($row, NULL, $XF) to set XF format without setting height // Use setRow($row, NULL, $XF) to set XF format without setting height
if ($height != NULL) { if ($height != NULL) {
$miyRw = $height * 20; // row height $miyRw = $height * 20; // row height
} } else {
else {
$miyRw = 0xff; // default row height is 256 $miyRw = 0xff; // default row height is 256
} }
@ -2180,8 +2126,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$length = 0x000A; // Number of bytes to follow $length = 0x000A; // Number of bytes to follow
$data = pack("vvvvv", $row_min, $row_max, $data = pack("vvvvv", $row_min, $row_max,
$col_min, $col_max, $reserved); $col_min, $col_max, $reserved);
} } elseif ($this->_BIFF_version == 0x0600) {
elseif ($this->_BIFF_version == 0x0600) {
$length = 0x000E; $length = 0x000E;
$data = pack("VVvvv", $row_min, $row_max, $data = pack("VVvvv", $row_min, $row_max,
$col_min, $col_max, $reserved); $col_min, $col_max, $reserved);
@ -2200,8 +2145,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$record = 0x023E; // Record identifier $record = 0x023E; // Record identifier
if ($this->_BIFF_version == 0x0500) { if ($this->_BIFF_version == 0x0500) {
$length = 0x000A; // Number of bytes to follow $length = 0x000A; // Number of bytes to follow
} } elseif ($this->_BIFF_version == 0x0600) {
elseif ($this->_BIFF_version == 0x0600) {
$length = 0x0012; $length = 0x0012;
} }
@ -2241,8 +2185,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
if ($this->_BIFF_version == 0x0500) { if ($this->_BIFF_version == 0x0500) {
$rgbHdr = 0x00000000; // Row/column heading and gridline color $rgbHdr = 0x00000000; // Row/column heading and gridline color
$data .= pack("V", $rgbHdr); $data .= pack("V", $rgbHdr);
} } elseif ($this->_BIFF_version == 0x0600) {
elseif ($this->_BIFF_version == 0x0600) {
$rgbHdr = 0x0040; // Row/column heading and gridline color index $rgbHdr = 0x0040; // Row/column heading and gridline color index
$zoom_factor_page_break = 0x0000; $zoom_factor_page_break = 0x0000;
$zoom_factor_normal = 0x0000; $zoom_factor_normal = 0x0000;
@ -2292,26 +2235,22 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
} }
if (isset($col_array[2])) { if (isset($col_array[2])) {
$coldx = $col_array[2]; $coldx = $col_array[2];
} } else {
else {
$coldx = 8.43; $coldx = 8.43;
} }
if (isset($col_array[3])) { if (isset($col_array[3])) {
$format = $col_array[3]; $format = $col_array[3];
} } else {
else {
$format = 0; $format = 0;
} }
if (isset($col_array[4])) { if (isset($col_array[4])) {
$grbit = $col_array[4]; $grbit = $col_array[4];
} } else {
else {
$grbit = 0; $grbit = 0;
} }
if (isset($col_array[5])) { if (isset($col_array[5])) {
$level = $col_array[5]; $level = $col_array[5];
} } else {
else {
$level = 0; $level = 0;
} }
$record = 0x007D; // Record identifier $record = 0x007D; // Record identifier
@ -2359,13 +2298,11 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
} }
// Swap last row/col for first row/col as necessary // Swap last row/col for first row/col as necessary
if ($rwFirst > $rwLast) if ($rwFirst > $rwLast) {
{
list($rwFirst, $rwLast) = array($rwLast, $rwFirst); list($rwFirst, $rwLast) = array($rwLast, $rwFirst);
} }
if ($colFirst > $colLast) if ($colFirst > $colLast) {
{
list($colFirst, $colLast) = array($colLast, $colFirst); list($colFirst, $colLast) = array($colLast, $colFirst);
} }
@ -2443,8 +2380,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$length = 0x02; // The following 2 bytes $length = 0x02; // The following 2 bytes
$cch = 1; // The following byte $cch = 1; // The following byte
$rgch = 0x02; // Self reference $rgch = 0x02; // Self reference
} } else {
else {
$length = 0x02 + strlen($sheetname); $length = 0x02 + strlen($sheetname);
$cch = strlen($sheetname); $cch = strlen($sheetname);
$rgch = 0x03; // Reference to a sheet in the current workbook $rgch = 0x03; // Reference to a sheet in the current workbook
@ -2477,16 +2413,14 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$colLeft = $panes[3]; $colLeft = $panes[3];
if (count($panes) > 4) { // if Active pane was received if (count($panes) > 4) { // if Active pane was received
$pnnAct = $panes[4]; $pnnAct = $panes[4];
} } else {
else {
$pnnAct = NULL; $pnnAct = NULL;
} }
$record = 0x0041; // Record identifier $record = 0x0041; // Record identifier
$length = 0x000A; // Number of bytes to follow $length = 0x000A; // Number of bytes to follow
// Code specific to frozen or thawed panes. // Code specific to frozen or thawed panes.
if ($this->_frozen) if ($this->_frozen) {
{
// Set default values for $rwTop and $colLeft // Set default values for $rwTop and $colLeft
if (!isset($rwTop)) { if (!isset($rwTop)) {
$rwTop = $y; $rwTop = $y;
@ -2494,9 +2428,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
if (!isset($colLeft)) { if (!isset($colLeft)) {
$colLeft = $x; $colLeft = $x;
} }
} } else {
else
{
// Set default values for $rwTop and $colLeft // Set default values for $rwTop and $colLeft
if (!isset($rwTop)) { if (!isset($rwTop)) {
$rwTop = 0; $rwTop = 0;
@ -2518,17 +2450,20 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
// Determine which pane should be active. There is also the undocumented // Determine which pane should be active. There is also the undocumented
// option to override this should it be necessary: may be removed later. // option to override this should it be necessary: may be removed later.
// //
if (!isset($pnnAct)) if (!isset($pnnAct)) {
{ if ($x != 0 && $y != 0) {
if ($x != 0 and $y != 0)
$pnnAct = 0; // Bottom right $pnnAct = 0; // Bottom right
if ($x != 0 and $y == 0) }
if ($x != 0 && $y == 0) {
$pnnAct = 1; // Top right $pnnAct = 1; // Top right
if ($x == 0 and $y != 0) }
if ($x == 0 && $y != 0) {
$pnnAct = 2; // Bottom left $pnnAct = 2; // Bottom left
if ($x == 0 and $y == 0) }
if ($x == 0 && $y == 0) {
$pnnAct = 3; // Top left $pnnAct = 3; // Top left
} }
}
$this->_active_pane = $pnnAct; // Used in _storeSelection $this->_active_pane = $pnnAct; // Used in _storeSelection
@ -2579,8 +2514,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$numHdr = pack("d", $numHdr); $numHdr = pack("d", $numHdr);
$numFtr = pack("d", $numFtr); $numFtr = pack("d", $numFtr);
if ($this->_byte_order) // if it's Big Endian if ($this->_byte_order) { // if it's Big Endian
{
$numHdr = strrev($numHdr); $numHdr = strrev($numHdr);
$numFtr = strrev($numFtr); $numFtr = strrev($numFtr);
} }
@ -2613,15 +2547,13 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
if ($this->_BIFF_version == 0x0600) { if ($this->_BIFF_version == 0x0600) {
$encoding = 0x0; // TODO: Unicode support $encoding = 0x0; // TODO: Unicode support
$length = 3 + $cch; // Bytes to follow $length = 3 + $cch; // Bytes to follow
} } else {
else {
$length = 1 + $cch; // Bytes to follow $length = 1 + $cch; // Bytes to follow
} }
$header = pack("vv", $record, $length); $header = pack("vv", $record, $length);
if ($this->_BIFF_version == 0x0600) { if ($this->_BIFF_version == 0x0600) {
$data = pack("vC", $cch, $encoding); $data = pack("vC", $cch, $encoding);
} } else {
else {
$data = pack("C", $cch); $data = pack("C", $cch);
} }
@ -2642,15 +2574,13 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
if ($this->_BIFF_version == 0x0600) { if ($this->_BIFF_version == 0x0600) {
$encoding = 0x0; // TODO: Unicode support $encoding = 0x0; // TODO: Unicode support
$length = 3 + $cch; // Bytes to follow $length = 3 + $cch; // Bytes to follow
} } else {
else {
$length = 1 + $cch; $length = 1 + $cch;
} }
$header = pack("vv", $record, $length); $header = pack("vv", $record, $length);
if ($this->_BIFF_version == 0x0600) { if ($this->_BIFF_version == 0x0600) {
$data = pack("vC", $cch, $encoding); $data = pack("vC", $cch, $encoding);
} } else {
else {
$data = pack("C", $cch); $data = pack("C", $cch);
} }
@ -2706,8 +2636,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$header = pack("vv", $record, $length); $header = pack("vv", $record, $length);
$data = pack("d", $margin); $data = pack("d", $margin);
if ($this->_byte_order) // if it's Big Endian if ($this->_byte_order) { // if it's Big Endian
{
$data = strrev($data); $data = strrev($data);
} }
@ -2728,8 +2657,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$header = pack("vv", $record, $length); $header = pack("vv", $record, $length);
$data = pack("d", $margin); $data = pack("d", $margin);
if ($this->_byte_order) // if it's Big Endian if ($this->_byte_order) { // if it's Big Endian
{
$data = strrev($data); $data = strrev($data);
} }
@ -2750,8 +2678,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$header = pack("vv", $record, $length); $header = pack("vv", $record, $length);
$data = pack("d", $margin); $data = pack("d", $margin);
if ($this->_byte_order) // if it's Big Endian if ($this->_byte_order) { // if it's Big Endian
{
$data = strrev($data); $data = strrev($data);
} }
@ -2772,8 +2699,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$header = pack("vv", $record, $length); $header = pack("vv", $record, $length);
$data = pack("d", $margin); $data = pack("d", $margin);
if ($this->_byte_order) // if it's Big Endian if ($this->_byte_order) { // if it's Big Endian
{
$data = strrev($data); $data = strrev($data);
} }
@ -2887,8 +2813,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
// Calculate the maximum column outline level. The equivalent calculation // Calculate the maximum column outline level. The equivalent calculation
// for the row outline level is carried out in setRow(). // for the row outline level is carried out in setRow().
for ($i=0; $i < count($this->_colinfo); $i++) for ($i = 0; $i < count($this->_colinfo); $i++) {
{
// Skip cols without outline level info. // Skip cols without outline level info.
if (count($col_level) >= 6) { if (count($col_level) >= 6) {
$col_level = max($this->_colinfo[$i][5], $col_level); $col_level = max($this->_colinfo[$i][5], $col_level);
@ -2930,8 +2855,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
// //
/*if ($this->_fit_page) { /*if ($this->_fit_page) {
$grbit = 0x05c1; $grbit = 0x05c1;
} } else {
else {
$grbit = 0x04c1; $grbit = 0x04c1;
}*/ }*/
// Set the option flags // Set the option flags
@ -2980,8 +2904,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$cbrk = count($breaks); // Number of page breaks $cbrk = count($breaks); // Number of page breaks
if ($this->_BIFF_version == 0x0600) { if ($this->_BIFF_version == 0x0600) {
$length = 2 + 6*$cbrk; // Bytes to follow $length = 2 + 6*$cbrk; // Bytes to follow
} } else {
else {
$length = 2 + 2*$cbrk; // Bytes to follow $length = 2 + 2*$cbrk; // Bytes to follow
} }
@ -2992,8 +2915,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
foreach($breaks as $break) { foreach($breaks as $break) {
if ($this->_BIFF_version == 0x0600) { if ($this->_BIFF_version == 0x0600) {
$data .= pack("vvv", $break, 0x0000, 0x00ff); $data .= pack("vvv", $break, 0x0000, 0x00ff);
} } else {
else {
$data .= pack("v", $break); $data .= pack("v", $break);
} }
} }
@ -3026,9 +2948,9 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$record = 0x001a; // Record identifier $record = 0x001a; // Record identifier
$cbrk = count($breaks); // Number of page breaks $cbrk = count($breaks); // Number of page breaks
if ($this->_BIFF_version == 0x0600) if ($this->_BIFF_version == 0x0600) {
$length = 2 + 6*$cbrk; // Bytes to follow $length = 2 + 6*$cbrk; // Bytes to follow
else { } else {
$length = 2 + 2*$cbrk; // Bytes to follow $length = 2 + 2*$cbrk; // Bytes to follow
} }
@ -3039,8 +2961,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
foreach ($breaks as $break) { foreach ($breaks as $break) {
if ($this->_BIFF_version == 0x0600) { if ($this->_BIFF_version == 0x0600) {
$data .= pack("vvv", $break, 0x0000, 0xffff); $data .= pack("vvv", $break, 0x0000, 0xffff);
} } else {
else {
$data .= pack("v", $break); $data .= pack("v", $break);
} }
} }
@ -3079,7 +3000,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
function _storePassword() function _storePassword()
{ {
// Exit unless sheet protection and password have been specified // Exit unless sheet protection and password have been specified
if (($this->_protect == 0) or (!isset($this->_password))) { if (($this->_protect == 0) || (!isset($this->_password))) {
return; return;
} }
@ -3110,8 +3031,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
function insertBitmap($row, $col, $bitmap, $x = 0, $y = 0, $scale_x = 1, $scale_y = 1) function insertBitmap($row, $col, $bitmap, $x = 0, $y = 0, $scale_x = 1, $scale_y = 1)
{ {
$bitmap_array = $this->_processBitmap($bitmap); $bitmap_array = $this->_processBitmap($bitmap);
if ($this->isError($bitmap_array)) if ($this->isError($bitmap_array)) {
{
$this->writeString($row, $col, $bitmap_array->getMessage()); $this->writeString($row, $col, $bitmap_array->getMessage());
return; return;
} }
@ -3193,12 +3113,10 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$row_end = $row_start; // Row containing bottom right corner of object $row_end = $row_start; // Row containing bottom right corner of object
// Zero the specified offset if greater than the cell dimensions // Zero the specified offset if greater than the cell dimensions
if ($x1 >= $this->_sizeCol($col_start)) if ($x1 >= $this->_sizeCol($col_start)) {
{
$x1 = 0; $x1 = 0;
} }
if ($y1 >= $this->_sizeRow($row_start)) if ($y1 >= $this->_sizeRow($row_start)) {
{
$y1 = 0; $y1 = 0;
} }
@ -3220,14 +3138,18 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
// Bitmap isn't allowed to start or finish in a hidden cell, i.e. a cell // Bitmap isn't allowed to start or finish in a hidden cell, i.e. a cell
// with zero eight or width. // with zero eight or width.
// //
if ($this->_sizeCol($col_start) == 0) if ($this->_sizeCol($col_start) == 0) {
return; return;
if ($this->_sizeCol($col_end) == 0) }
if ($this->_sizeCol($col_end) == 0) {
return; return;
if ($this->_sizeRow($row_start) == 0) }
if ($this->_sizeRow($row_start) == 0) {
return; return;
if ($this->_sizeRow($row_end) == 0) }
if ($this->_sizeRow($row_end) == 0) {
return; return;
}
// Convert the pixel values to the percentage value expected by Excel // Convert the pixel values to the percentage value expected by Excel
$x1 = $x1 / $this->_sizeCol($col_start) * 1024; $x1 = $x1 / $this->_sizeCol($col_start) * 1024;
@ -3257,12 +3179,10 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
if (isset($this->col_sizes[$col])) { if (isset($this->col_sizes[$col])) {
if ($this->col_sizes[$col] == 0) { if ($this->col_sizes[$col] == 0) {
return(0); return(0);
} } else {
else {
return(floor(7 * $this->col_sizes[$col] + 5)); return(floor(7 * $this->col_sizes[$col] + 5));
} }
} } else {
else {
return(64); return(64);
} }
} }
@ -3283,12 +3203,10 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
if (isset($this->_row_sizes[$row])) { if (isset($this->_row_sizes[$row])) {
if ($this->_row_sizes[$row] == 0) { if ($this->_row_sizes[$row] == 0) {
return(0); return(0);
} } else {
else {
return(floor(4/3 * $this->_row_sizes[$row])); return(floor(4/3 * $this->_row_sizes[$row]));
} }
} } else {
else {
return(17); return(17);
} }
} }
@ -3511,8 +3429,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$this->_append($header.$data); $this->_append($header.$data);
$record = 0x01be; // Record identifier $record = 0x01be; // Record identifier
foreach($this->_dv as $dv) foreach($this->_dv as $dv) {
{
$length = strlen($dv); // Bytes to follow $length = strlen($dv); // Bytes to follow
$header = pack("vv", $record, $length); $header = pack("vv", $record, $length);
$this->_append($header.$dv); $this->_append($header.$dv);