Fixed issue #9564: Worksheet::setColumn() can only be called once per range - patch by Dan Lynn

git-svn-id: https://svn.php.net/repository/pear/packages/Spreadsheet_Excel_Writer/trunk@291408 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
Carsten Schmitz 2009-11-29 02:02:47 +00:00
parent 3cabdc6888
commit f8695a74b6
1 changed files with 34 additions and 10 deletions

View File

@ -751,13 +751,37 @@ class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwr
* @param integer $level The optional outline level * @param integer $level The optional outline level
*/ */
function setColumn($firstcol, $lastcol, $width, $format = null, $hidden = 0, $level = 0) function setColumn($firstcol, $lastcol, $width, $format = null, $hidden = 0, $level = 0)
{ // added by Dan Lynn <dan@spiderweblabs.com) on 2006-12-06
// look for any ranges this might overlap and remove, size or split where necessary
foreach ($this->_colinfo as $key => $colinfo)
{ {
$existing_start = $colinfo[0]; $existing_end = $colinfo[1];
// if the new range starts within another range
if ($firstcol > $existing_start && $firstcol < $existing_end)
{ // trim the existing range to the beginning of the new range
$this->_colinfo[$key][1] = $firstcol - 1;
// if the new range lies WITHIN the existing range
if ($lastcol < $existing_end)
{ // split the existing range by adding a range after our new range
$this->_colinfo[] = array($lastcol+1, $existing_end, $colinfo[2], &$colinfo[3], $colinfo[4], $colinfo[5]);
}
} // if the new range ends inside an existing range
elseif ($lastcol > $existing_start && $lastcol < $existing_end)
{ // trim the existing range to the end of the new range
$this->_colinfo[$key][0] = $lastcol + 1;
} // if the new range completely overlaps the existing range
elseif ($firstcol <= $existing_start && $lastcol >= $existing_end)
{
unset($this->_colinfo[$key]);
}
} // added by Dan Lynn <dan@spiderweblabs.com) on 2006-12-06
// regenerate keys
$this->_colinfo = array_values($this->_colinfo);
$this->_colinfo[] = array($firstcol, $lastcol, $width, &$format, $hidden, $level); $this->_colinfo[] = array($firstcol, $lastcol, $width, &$format, $hidden, $level);
// Set width to zero if column is hidden // Set width to zero if column is hidden
$width = ($hidden) ? 0 : $width; $width = ($hidden) ? 0 : $width;
for ($col = $firstcol; $col <= $lastcol; $col++)
for ($col = $firstcol; $col <= $lastcol; $col++) { {
$this->col_sizes[$col] = $width; $this->col_sizes[$col] = $width;
} }
} }