Public Member Functions | Data Fields

Spreadsheet_Excel_Writer_BIFFwriter Class Reference

Inheritance diagram for Spreadsheet_Excel_Writer_BIFFwriter:
Collaboration diagram for Spreadsheet_Excel_Writer_BIFFwriter:

Public Member Functions

 Spreadsheet_Excel_Writer_BIFFwriter ()
 Constructor.
 _setByteOrder ()
 Determine the byte order and store it as class data to avoid recalculating it for each call to new().
 _prepend ($data)
 General storage function.
 _append ($data)
 General storage function.
 _storeBof ($type)
 Writes Excel BOF record to indicate the beginning of a stream or sub-stream in the BIFF file.
 _storeEof ()
 Writes Excel EOF record to indicate the end of a BIFF stream.
 _addContinue ($data)
 Excel limits the size of BIFF records.

Data Fields

 $_BIFF_version = 0x0500
 $_byte_order
 $_data
 $_datasize
 $_limit

Detailed Description

Definition at line 54 of file BIFFwriter.php.


Member Function Documentation

Spreadsheet_Excel_Writer_BIFFwriter::_addContinue ( data  ) 

Excel limits the size of BIFF records.

In Excel 5 the limit is 2084 bytes. In Excel 97 the limit is 8228 bytes. Records that are longer than these limits must be split up into CONTINUE blocks.

This function takes a long BIFF record and inserts CONTINUE records as necessary.

Parameters:
string $data The original binary data to be written
Returns:
string A very convenient string of continue blocks private

Definition at line 215 of file BIFFwriter.php.

References $data.

Referenced by Spreadsheet_Excel_Writer_Worksheet::_append(), _append(), and _prepend().

    {
        $limit      = $this->_limit;
        $record     = 0x003C;         // Record identifier
 
        // The first 2080/8224 bytes remain intact. However, we have to change
        // the length field of the record.
        $tmp = substr($data, 0, 2).pack("v", $limit-4).substr($data, 4, $limit - 4);
        
        $header = pack("vv", $record, $limit);  // Headers for continue records
 
        // Retrieve chunks of 2080/8224 bytes +4 for the header.
        for($i = $limit; $i < strlen($data) - $limit; $i += $limit)
        {
            $tmp .= $header;
            $tmp .= substr($data, $i, $limit);
        }
 
        // Retrieve the last chunk of data
        $header  = pack("vv", $record, strlen($data) - $i);
        $tmp    .= $header;
        $tmp    .= substr($data,$i,strlen($data) - $i);
 
        return $tmp;
    }

Here is the caller graph for this function:

Spreadsheet_Excel_Writer_BIFFwriter::_append ( data  ) 
Spreadsheet_Excel_Writer_BIFFwriter::_prepend ( data  ) 

General storage function.

Parameters:
string $data binary data to prepend private

Definition at line 133 of file BIFFwriter.php.

References $data, and _addContinue().

Referenced by _storeBof().

    {
        if (strlen($data) > $this->_limit) {
            $data = $this->_addContinue($data);
        }
        $this->_data      = $data.$this->_data;
        $this->_datasize += strlen($data);
    }

Here is the call graph for this function:

Here is the caller graph for this function:

Spreadsheet_Excel_Writer_BIFFwriter::_setByteOrder (  ) 

Determine the byte order and store it as class data to avoid recalculating it for each call to new().

private

Definition at line 108 of file BIFFwriter.php.

Referenced by Spreadsheet_Excel_Writer_BIFFwriter().

    {
        // Check if "pack" gives the required IEEE 64bit float
        $teststr = pack("d", 1.2345);
        $number  = pack("C8", 0x8D, 0x97, 0x6E, 0x12, 0x83, 0xC0, 0xF3, 0x3F);
        if ($number == $teststr) {
            $byte_order = 0;    // Little Endian
        }
        elseif ($number == strrev($teststr)){
            $byte_order = 1;    // Big Endian
        }
        else {
            // Give up. I'll fix this in a later version.
            return $this->raiseError("Required floating point format ".
                                     "not supported on this platform.");
        }
        $this->_byte_order = $byte_order;
    }

Here is the caller graph for this function:

Spreadsheet_Excel_Writer_BIFFwriter::_storeBof ( type  ) 

Writes Excel BOF record to indicate the beginning of a stream or sub-stream in the BIFF file.

Parameters:
integer $type Type of BIFF file to write: 0x0005 Workbook, 0x0010 Worksheet. private

Definition at line 165 of file BIFFwriter.php.

References $data, $type, and _prepend().

Referenced by Spreadsheet_Excel_Writer_Workbook::_storeWorkbook(), and Spreadsheet_Excel_Writer_Worksheet::close().

    {
        $record  = 0x0809;        // Record identifier

        // According to the SDK $build and $year should be set to zero.
        // However, this throws a warning in Excel 5. So, use magic numbers.
        if ($this->_BIFF_version == 0x0500) {
            $length  = 0x0008;
            $unknown = '';
            $build   = 0x096C;
            $year    = 0x07C9;
        }
        elseif ($this->_BIFF_version == 0x0600) {
            $length  = 0x0010;
            $unknown = pack("VV", 0x00000041, 0x00000006); //unknown last 8 bytes for BIFF8
            $build   = 0x0DBB;
            $year    = 0x07CC;
        }
        $version = $this->_BIFF_version;
   
        $header  = pack("vv",   $record, $length);
        $data    = pack("vvvv", $version, $type, $build, $year);
        $this->_prepend($header.$data.$unknown);
    }

Here is the call graph for this function:

Here is the caller graph for this function:

Spreadsheet_Excel_Writer_BIFFwriter::_storeEof (  ) 

Writes Excel EOF record to indicate the end of a BIFF stream.

private

Definition at line 195 of file BIFFwriter.php.

References _append().

Referenced by Spreadsheet_Excel_Writer_Workbook::_storeWorkbook(), and Spreadsheet_Excel_Writer_Worksheet::close().

    {
        $record    = 0x000A;   // Record identifier
        $length    = 0x0000;   // Number of bytes to follow
        $header    = pack("vv", $record, $length);
        $this->_append($header);
    }

Here is the call graph for this function:

Here is the caller graph for this function:

Spreadsheet_Excel_Writer_BIFFwriter::Spreadsheet_Excel_Writer_BIFFwriter (  ) 

Constructor.

public

Definition at line 92 of file BIFFwriter.php.

References _setByteOrder().

Referenced by Spreadsheet_Excel_Writer_Workbook::Spreadsheet_Excel_Writer_Workbook(), and Spreadsheet_Excel_Writer_Worksheet::Spreadsheet_Excel_Writer_Worksheet().

    {
        $this->_byte_order = '';
        $this->_data       = '';
        $this->_datasize   = 0;
        $this->_limit      = 2080;   
        // Set the byte order
        $this->_setByteOrder();
    }

Here is the call graph for this function:

Here is the caller graph for this function:


Field Documentation

Spreadsheet_Excel_Writer_BIFFwriter::$_BIFF_version = 0x0500

Definition at line 60 of file BIFFwriter.php.

Spreadsheet_Excel_Writer_BIFFwriter::$_byte_order

Definition at line 66 of file BIFFwriter.php.

Spreadsheet_Excel_Writer_BIFFwriter::$_data

Definition at line 72 of file BIFFwriter.php.

Spreadsheet_Excel_Writer_BIFFwriter::$_datasize

Definition at line 78 of file BIFFwriter.php.

Spreadsheet_Excel_Writer_BIFFwriter::$_limit

Definition at line 85 of file BIFFwriter.php.


The documentation for this class was generated from the following file: