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 |
Definition at line 54 of file BIFFwriter.php.
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.
string | $data The original binary data to be written |
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; }
Spreadsheet_Excel_Writer_BIFFwriter::_append | ( | $ | data | ) |
General storage function.
string | $data binary data to append private |
Reimplemented in Spreadsheet_Excel_Writer_Worksheet.
Definition at line 148 of file BIFFwriter.php.
References $data, and _addContinue().
Referenced by Spreadsheet_Excel_Writer_Workbook::_storeAllFonts(), Spreadsheet_Excel_Writer_Workbook::_storeAllXfs(), Spreadsheet_Excel_Writer_Workbook::_storeBoundsheet(), Spreadsheet_Excel_Writer_Workbook::_storeCodepage(), Spreadsheet_Excel_Writer_Workbook::_storeCountry(), Spreadsheet_Excel_Writer_Workbook::_storeDatemode(), _storeEof(), Spreadsheet_Excel_Writer_Workbook::_storeExterncount(), Spreadsheet_Excel_Writer_Workbook::_storeExternsheet(), Spreadsheet_Excel_Writer_Workbook::_storeExternsheetBiff8(), Spreadsheet_Excel_Writer_Workbook::_storeNameLong(), Spreadsheet_Excel_Writer_Workbook::_storeNameShort(), Spreadsheet_Excel_Writer_Workbook::_storeNumFormat(), Spreadsheet_Excel_Writer_Workbook::_storePalette(), Spreadsheet_Excel_Writer_Workbook::_storeSharedStringsTable(), Spreadsheet_Excel_Writer_Workbook::_storeStyle(), Spreadsheet_Excel_Writer_Workbook::_storeSupbookInternal(), and Spreadsheet_Excel_Writer_Workbook::_storeWindow1().
{ if (strlen($data) > $this->_limit) { $data = $this->_addContinue($data); } $this->_data = $this->_data.$data; $this->_datasize += strlen($data); }
Spreadsheet_Excel_Writer_BIFFwriter::_prepend | ( | $ | data | ) |
General storage function.
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); }
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; }
Spreadsheet_Excel_Writer_BIFFwriter::_storeBof | ( | $ | type | ) |
Writes Excel BOF record to indicate the beginning of a stream or sub-stream in the BIFF file.
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); }
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); }
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(); }
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.