You are here

public function PHPExcel_Worksheet::calculateColumnWidths in Loft Data Grids 7.2

Same name and namespace in other branches
  1. 6.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Worksheet.php \PHPExcel_Worksheet::calculateColumnWidths()

Calculate widths for auto-size columns

Parameters

boolean $calculateMergeCells Calculate merge cell width:

Return value

PHPExcel_Worksheet;

File

vendor/phpoffice/phpexcel/Classes/PHPExcel/Worksheet.php, line 724

Class

PHPExcel_Worksheet
PHPExcel_Worksheet

Code

public function calculateColumnWidths($calculateMergeCells = false) {

  // initialize $autoSizes array
  $autoSizes = array();
  foreach ($this
    ->getColumnDimensions() as $colDimension) {
    if ($colDimension
      ->getAutoSize()) {
      $autoSizes[$colDimension
        ->getColumnIndex()] = -1;
    }
  }

  // There is only something to do if there are some auto-size columns
  if (!empty($autoSizes)) {

    // build list of cells references that participate in a merge
    $isMergeCell = array();
    foreach ($this
      ->getMergeCells() as $cells) {
      foreach (PHPExcel_Cell::extractAllCellReferencesInRange($cells) as $cellReference) {
        $isMergeCell[$cellReference] = true;
      }
    }

    // loop through all cells in the worksheet
    foreach ($this
      ->getCellCollection(false) as $cellID) {
      $cell = $this
        ->getCell($cellID);
      if (isset($autoSizes[$this->_cellCollection
        ->getCurrentColumn()])) {

        // Determine width if cell does not participate in a merge
        if (!isset($isMergeCell[$this->_cellCollection
          ->getCurrentAddress()])) {

          // Calculated value
          // To formatted string
          $cellValue = PHPExcel_Style_NumberFormat::toFormattedString($cell
            ->getCalculatedValue(), $this
            ->getParent()
            ->getCellXfByIndex($cell
            ->getXfIndex())
            ->getNumberFormat()
            ->getFormatCode());
          $autoSizes[$this->_cellCollection
            ->getCurrentColumn()] = max((double) $autoSizes[$this->_cellCollection
            ->getCurrentColumn()], (double) PHPExcel_Shared_Font::calculateColumnWidth($this
            ->getParent()
            ->getCellXfByIndex($cell
            ->getXfIndex())
            ->getFont(), $cellValue, $this
            ->getParent()
            ->getCellXfByIndex($cell
            ->getXfIndex())
            ->getAlignment()
            ->getTextRotation(), $this
            ->getDefaultStyle()
            ->getFont()));
        }
      }
    }

    // adjust column widths
    foreach ($autoSizes as $columnIndex => $width) {
      if ($width == -1) {
        $width = $this
          ->getDefaultColumnDimension()
          ->getWidth();
      }
      $this
        ->getColumnDimension($columnIndex)
        ->setWidth($width);
    }
  }
  return $this;
}