Bug #16025 MERGEDCELLS record split by CONTINUE record

git-svn-id: https://svn.php.net/repository/pear/packages/Spreadsheet_Excel_Writer/trunk@320823 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
Daniel O'Connor 2011-12-10 02:08:08 +00:00
parent 6f5b44cd6b
commit dadc38fdd6
1 changed files with 32 additions and 9 deletions

View File

@ -343,6 +343,18 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
*/ */
var $_str_table; var $_str_table;
/**
* Number of merged cell ranges in actual record
* @var int $_merged_cells_counter
*/
var $_merged_cells_counter = 0;
/**
* Number of actual mergedcells record
* @var int $_merged_cells_record
*/
var $_merged_cells_record = 0;
/** /**
* Merged cell ranges * Merged cell ranges
* @var array * @var array
@ -695,9 +707,18 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
if (($last_row < $first_row) || ($last_col < $first_col)) { if (($last_row < $first_row) || ($last_col < $first_col)) {
return; return;
} }
$max_record_ranges = floor(($this->_limit - 6) / 8);
if($this->_merged_cells_counter >= $max_record_ranges)
{
$this->_merged_cells_record++;
$this->_merged_cells_counter = 0;
}
// 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
// is going to be called // is going to be called
$this->_merged_ranges[] = array($first_row, $first_col, $last_row, $last_col); $this->_merged_ranges[$this->_merged_cells_record][] = array($first_row, $first_col, $last_row, $last_col);
$this->_merged_cells_counter++;
} }
/** /**
@ -2441,14 +2462,16 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
return; return;
} }
$record = 0x00E5; $record = 0x00E5;
$length = 2 + count($this->_merged_ranges) * 8; foreach($this->_merged_ranges as $ranges)
{
$length = 2 + count($ranges) * 8;
$header = pack('vv', $record, $length); $header = pack('vv', $record, $length);
$data = pack('v', count($this->_merged_ranges)); $data = pack('v', count($ranges));
foreach ($this->_merged_ranges as $range) { foreach($ranges as $range)
$data .= pack('vvvv', $range[0], $range[2], $range[1], $range[3]); $data .= pack('vvvv', $range[0], $range[2], $range[1], $range[3]);
$string=$header.$data;
$this->_append(&$string, true);
} }
$this->_append($header . $data);
} }
/** /**