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 | |
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;
}
Here is the caller graph for this function:| 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);
}
Here is the call graph for this function:
Here is the caller graph for this function:| 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);
}
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.
| 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:| 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.
1.7.1