From dadc38fdd6740935744cdc82e12a72678960b3a0 Mon Sep 17 00:00:00 2001 From: Daniel O'Connor Date: Sat, 10 Dec 2011 02:08:08 +0000 Subject: [PATCH] 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 --- Spreadsheet/Excel/Writer/Worksheet.php | 41 ++++++++++++++++++++------ 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/Spreadsheet/Excel/Writer/Worksheet.php b/Spreadsheet/Excel/Writer/Worksheet.php index 1bf7581..a03b1a6 100644 --- a/Spreadsheet/Excel/Writer/Worksheet.php +++ b/Spreadsheet/Excel/Writer/Worksheet.php @@ -343,6 +343,18 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr */ 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 * @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)) { 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 // 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; } $record = 0x00E5; - $length = 2 + count($this->_merged_ranges) * 8; - - $header = pack('vv', $record, $length); - $data = pack('v', count($this->_merged_ranges)); - foreach ($this->_merged_ranges as $range) { - $data .= pack('vvvv', $range[0], $range[2], $range[1], $range[3]); - } - $this->_append($header . $data); + foreach($this->_merged_ranges as $ranges) + { + $length = 2 + count($ranges) * 8; + $header = pack('vv', $record, $length); + $data = pack('v', count($ranges)); + foreach($ranges as $range) + $data .= pack('vvvv', $range[0], $range[2], $range[1], $range[3]); + $string=$header.$data; + $this->_append(&$string, true); + } } /**