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

Request #8303 Support for auto sizing of columns
Submitted: 2006-07-27 06:57 UTC
From: dsanders at baselinesolutions dot com dot au Assigned:
Status: Verified Package: Spreadsheet_Excel_Writer (version 0.9.0)
PHP Version: 4.3.10 OS: FC2
Roadmaps: (Not assigned)    
Subscription  
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes. If this is not your bug, you can add a comment by following this link. If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
2009-11-29 08:09 UTC
Package:
Bug Type:
Summary:
From: dsanders at baselinesolutions dot com dot au
New email:
PHP Version: Package Version: OS:

 

 [2006-07-27 06:57 UTC] dsanders at baselinesolutions dot com dot au (David Sanders)
Description: ------------ It'd be great to add support for auto sizing of the column widths... I've attempted to create my own patch for this, but I don't fully understand how this package stores the cell information so I guess you guys could do a better job. A possible simple patch for this would be in Worksheet.php. (see test script) This patch assumes that 1 unit of width is about the same as the width of 1 character at size 10 Arial. It's not accurate, but it gives me satisfactory sizing of the columns. Test script: --------------- @@ -497,6 +497,12 @@ class Spreadsheet_Excel_Writer_Worksheet { $num_sheets = count($sheetnames); + // set the column widths, if we need to + if (!empty($this->col_auto_width)) + { + $this->_setColumnAutoWidths(); + } + /*********************************************** * Prepend in reverse order!! */ @@ -740,6 +746,44 @@ class Spreadsheet_Excel_Writer_Worksheet } } + var $col_auto_width_padding = array(); + var $col_widths = array(); + var $col_auto_width = array(); + /** + * + * @access public + * @param integer $firstcol first column on the range + * @param integer $lastcol last column on the range + * @param bool $flag turn on/off the auto-width + * @param integer $padding amount of padding to add to the column width + */ + function setColumnAutoWidth($firstcol, $lastcol, $flag = true, $padding = 0) + { + for ($col = $firstcol; $col <= $lastcol; $col++) + { + if ($flag) + { + $this->col_auto_width[$col] = $flag; + } + else + { + unset($this->col_auto_width[$col]); + } + $this->col_auto_width_padding[$col] = $padding; + } + } + + function _setColumnAutoWidths() + { + foreach ($this->col_auto_width as $col => $something) + { + if (isset($this->col_widths[$col])) + { + $this->setColumn($col,$col,$this->col_widths[$col] + $this->col_auto_width_padding[$col]); + } + } + } + /** * Set which cell or cells are selected in a worksheet * @@ -1410,6 +1454,16 @@ class Spreadsheet_Excel_Writer_Worksheet */ function writeNumber($row, $col, $num, $format = 0) { + // record the number of digits, if we are auto column sizing + if (!empty($this->col_auto_width[$col])) + { + $length = strlen($num); + if (empty($this->col_widths[$col]) || $length > $this->col_widths[$col]) + { + $this->col_widths[$col] = $length; + } + } + $record = 0x0203; // Record identifier $length = 0x000E; // Number of bytes to follow @@ -1463,6 +1517,17 @@ class Spreadsheet_Excel_Writer_Worksheet */ function writeString($row, $col, $str, $format = 0) { + // record the string length, if using auto column sizing + if (!empty($this->col_auto_width[$col])) + { + $length = strlen($str); + + if (empty($this->col_widths[$col]) || $length > $this->col_widths[$col]) + { + $this->col_widths[$col] = $length; + } + } + if ($this->_BIFF_version == 0x0600) { return $this->writeStringBIFF8($row, $col, $str, $format); } @@ -1813,6 +1878,16 @@ class Spreadsheet_Excel_Writer_Worksheet */ function writeUrl($row, $col, $url, $string = '', $format = 0) { + // record the string length, if using auto column sizing + if (!empty($this->col_auto_width[$col])) + { + $length = strlen($url); + if (empty($this->col_widths[$col]) || $length > $this->col_widths[$col]) + { + $this->col_widths[$col] = $length; + } + } + // Add start row and col to arg list return($this->_writeUrlRange($row, $col, $row, $col, $url, $string, $format)); }

Comments

 [2009-11-29 08:09 UTC] cschmitz (Carsten Schmitz)
-Status: Open +Status: Verified