Package home | Report new bug | New search | Development Roadmap Status: Open | Feedback | All | Closed Since Version 0.9.4

Bug #9564 Worksheet::setColumn() can only be called once per range
Submitted: 2006-12-06 20:02 UTC
From: dan at spiderweblabs dot com Assigned: cschmitz
Status: Closed Package: Spreadsheet_Excel_Writer (version 0.9.1)
PHP Version: 5.1.6 OS: Windows Server 2003
Roadmaps: (Not assigned)    
Subscription  


 [2006-12-06 20:02 UTC] dan at spiderweblabs dot com (Dan Lynn)
Description: ------------ I plan on fixing this and submitting back to CVS, but I thought I'd let everyone know ahead of time. Worksheet::setColumn() adds a new array onto the Worksheet::_colinfo array. I think the desired behavior would be to override previous overlapping entries, splitting ranges where necessary. Test script: --------------- $workbook = new Spreadsheet_Excel_Writer(); $worksheet =& $workbook->addWorksheet(); $worksheet->setColumn(0,0,10); $worksheet->setColumn(0,0,100); $workbook->send("text.xls"); $workbook->close(); Expected result: ---------------- I expect column A to be 100 units wide; Actual result: -------------- Column A is 10 units wide;

Comments

 [2006-12-06 21:56 UTC] dan at spiderweblabs dot com
Here is my modified Worksheet::setColumn() method: /** * Set the width of a single column or a range of columns. * * @access public * @param integer $firstcol first column on the range * @param integer $lastcol last column on the range * @param integer $width width to set * @param mixed $format The optional XF format to apply to the columns * @param integer $hidden The optional hidden atribute * @param integer $level The optional outline level */ 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); // Set width to zero if column is hidden $width = ($hidden) ? 0 : $width; for ($col = $firstcol; $col <= $lastcol; $col++) { $this->col_sizes[$col] = $width; } }
 [2009-11-29 08:02 UTC] User who submitted this comment has not confirmed identity
If you submitted this note, check your email.If you do not have a message, click here to re-send
MANUAL CONFIRMATION IS NOT POSSIBLE.  Write a message to pear-dev@lists.php.net
to request the confirmation link.  All bugs/comments/patches associated with this

email address will be deleted within 48 hours if the account request is not confirmed!