changing to a better merging (Worksheet::setMerge())

git-svn-id: https://svn.php.net/repository/pear/packages/Spreadsheet_Excel_Writer/trunk@146621 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
Xavier Noguer Gallego 2003-12-16 21:28:16 +00:00
parent 29f21aed74
commit 16b043f461
1 changed files with 54 additions and 5 deletions

View File

@ -343,6 +343,12 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
*/
var $_str_table;
/**
* Merged cell ranges
* @var array
*/
var $_merged_ranges;
/**
* Constructor
*
@ -442,6 +448,8 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$this->_outline_right = 1;
$this->_outline_on = 1;
$this->_merged_ranges = array();
$this->_dv = array();
$this->_initialize();
@ -581,6 +589,7 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$this->_storePanes($this->_panes);
}
$this->_storeSelection($this->_selection);
$this->_storeMergedCells();
/* TODO: add data validity */
/*if ($this->_BIFF_version == 0x0600) {
$this->_storeDataValidity();
@ -619,18 +628,37 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
if ($this->_using_tmpfile) {
fseek($fh, 0);
}
return($tmp);
return $tmp;
}
// Return data stored on disk
if ($this->_using_tmpfile)
{
if ($tmp = fread($this->_filehandle, $buffer)) {
return($tmp);
return $tmp;
}
}
// No data to return
return('');
return '';
}
/**
* Sets a merged cell range
*
* @access public
* @param integer $first_row First row of the area to merge
* @param integer $first_col First column of the area to merge
* @param integer $last_row Last row of the area to merge
* @param integer $last_col Last column of the area to merge
*/
function setMerge($first_row, $first_col, $last_row, $last_col)
{
if (($last_row < $first_row) or ($last_col < $first_col)) {
return;
}
// 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);
}
/**
@ -2335,6 +2363,27 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
$this->_append($header.$data);
}
/**
* Store the MERGEDCELLS record for all ranges of merged cells
*
* @access private
*/
function _storeMergedCells()
{
// if there are no merged cell ranges set, return
if (count($this->_merged_ranges) == 0) {
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);
}
/**
* Write BIFF record EXTERNCOUNT to indicate the number of external sheet