You are here

class PHPExcel_Writer_Excel5_Xf in Loft Data Grids 6.2

Same name and namespace in other branches
  1. 7.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel5/Xf.php \PHPExcel_Writer_Excel5_Xf

PHPExcel_Writer_Excel5_Xf

@category PHPExcel @package PHPExcel_Writer_Excel5 @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)

Hierarchy

Expanded class hierarchy of PHPExcel_Writer_Excel5_Xf

File

vendor/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel5/Xf.php, line 71

View source
class PHPExcel_Writer_Excel5_Xf {

  /**
   * Style XF or a cell XF ?
   *
   * @var boolean
   */
  private $_isStyleXf;

  /**
   * Index to the FONT record. Index 4 does not exist
   * @var integer
   */
  private $_fontIndex;

  /**
   * An index (2 bytes) to a FORMAT record (number format).
   * @var integer
   */
  public $_numberFormatIndex;

  /**
   * 1 bit, apparently not used.
   * @var integer
   */
  public $_text_justlast;

  /**
   * The cell's foreground color.
   * @var integer
   */
  public $_fg_color;

  /**
   * The cell's background color.
   * @var integer
   */
  public $_bg_color;

  /**
   * Color of the bottom border of the cell.
   * @var integer
   */
  public $_bottom_color;

  /**
   * Color of the top border of the cell.
   * @var integer
   */
  public $_top_color;

  /**
   * Color of the left border of the cell.
   * @var integer
   */
  public $_left_color;

  /**
   * Color of the right border of the cell.
   * @var integer
   */
  public $_right_color;

  /**
   * Constructor
   *
   * @access public
   * @param PHPExcel_Style	The XF format
   */
  public function __construct(PHPExcel_Style $style = null) {
    $this->_isStyleXf = false;
    $this->_fontIndex = 0;
    $this->_numberFormatIndex = 0;
    $this->_text_justlast = 0;
    $this->_fg_color = 0x40;
    $this->_bg_color = 0x41;
    $this->_diag = 0;
    $this->_bottom_color = 0x40;
    $this->_top_color = 0x40;
    $this->_left_color = 0x40;
    $this->_right_color = 0x40;
    $this->_diag_color = 0x40;
    $this->_style = $style;
  }

  /**
   * Generate an Excel BIFF XF record (style or cell).
   *
   * @return string The XF record
   */
  function writeXf() {

    // Set the type of the XF record and some of the attributes.
    if ($this->_isStyleXf) {
      $style = 0xfff5;
    }
    else {
      $style = self::_mapLocked($this->_style
        ->getProtection()
        ->getLocked());
      $style |= self::_mapHidden($this->_style
        ->getProtection()
        ->getHidden()) << 1;
    }

    // Flags to indicate if attributes have been set.
    $atr_num = $this->_numberFormatIndex != 0 ? 1 : 0;
    $atr_fnt = $this->_fontIndex != 0 ? 1 : 0;
    $atr_alc = (int) $this->_style
      ->getAlignment()
      ->getWrapText() ? 1 : 0;
    $atr_bdr = self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getBottom()
      ->getBorderStyle()) || self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getTop()
      ->getBorderStyle()) || self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getLeft()
      ->getBorderStyle()) || self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getRight()
      ->getBorderStyle()) ? 1 : 0;
    $atr_pat = $this->_fg_color != 0x40 || $this->_bg_color != 0x41 || self::_mapFillType($this->_style
      ->getFill()
      ->getFillType()) ? 1 : 0;
    $atr_prot = self::_mapLocked($this->_style
      ->getProtection()
      ->getLocked()) | self::_mapHidden($this->_style
      ->getProtection()
      ->getHidden());

    // Zero the default border colour if the border has not been set.
    if (self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getBottom()
      ->getBorderStyle()) == 0) {
      $this->_bottom_color = 0;
    }
    if (self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getTop()
      ->getBorderStyle()) == 0) {
      $this->_top_color = 0;
    }
    if (self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getRight()
      ->getBorderStyle()) == 0) {
      $this->_right_color = 0;
    }
    if (self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getLeft()
      ->getBorderStyle()) == 0) {
      $this->_left_color = 0;
    }
    if (self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getDiagonal()
      ->getBorderStyle()) == 0) {
      $this->_diag_color = 0;
    }
    $record = 0xe0;

    // Record identifier
    $length = 0x14;

    // Number of bytes to follow
    $ifnt = $this->_fontIndex;

    // Index to FONT record
    $ifmt = $this->_numberFormatIndex;

    // Index to FORMAT record
    $align = $this
      ->_mapHAlign($this->_style
      ->getAlignment()
      ->getHorizontal());

    // Alignment
    $align |= (int) $this->_style
      ->getAlignment()
      ->getWrapText() << 3;
    $align |= self::_mapVAlign($this->_style
      ->getAlignment()
      ->getVertical()) << 4;
    $align |= $this->_text_justlast << 7;
    $used_attrib = $atr_num << 2;
    $used_attrib |= $atr_fnt << 3;
    $used_attrib |= $atr_alc << 4;
    $used_attrib |= $atr_bdr << 5;
    $used_attrib |= $atr_pat << 6;
    $used_attrib |= $atr_prot << 7;
    $icv = $this->_fg_color;

    // fg and bg pattern colors
    $icv |= $this->_bg_color << 7;
    $border1 = self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getLeft()
      ->getBorderStyle());

    // Border line style and color
    $border1 |= self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getRight()
      ->getBorderStyle()) << 4;
    $border1 |= self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getTop()
      ->getBorderStyle()) << 8;
    $border1 |= self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getBottom()
      ->getBorderStyle()) << 12;
    $border1 |= $this->_left_color << 16;
    $border1 |= $this->_right_color << 23;
    $diagonalDirection = $this->_style
      ->getBorders()
      ->getDiagonalDirection();
    $diag_tl_to_rb = $diagonalDirection == PHPExcel_Style_Borders::DIAGONAL_BOTH || $diagonalDirection == PHPExcel_Style_Borders::DIAGONAL_DOWN;
    $diag_tr_to_lb = $diagonalDirection == PHPExcel_Style_Borders::DIAGONAL_BOTH || $diagonalDirection == PHPExcel_Style_Borders::DIAGONAL_UP;
    $border1 |= $diag_tl_to_rb << 30;
    $border1 |= $diag_tr_to_lb << 31;
    $border2 = $this->_top_color;

    // Border color
    $border2 |= $this->_bottom_color << 7;
    $border2 |= $this->_diag_color << 14;
    $border2 |= self::_mapBorderStyle($this->_style
      ->getBorders()
      ->getDiagonal()
      ->getBorderStyle()) << 21;
    $border2 |= self::_mapFillType($this->_style
      ->getFill()
      ->getFillType()) << 26;
    $header = pack("vv", $record, $length);

    //BIFF8 options: identation, shrinkToFit and  text direction
    $biff8_options = $this->_style
      ->getAlignment()
      ->getIndent();
    $biff8_options |= (int) $this->_style
      ->getAlignment()
      ->getShrinkToFit() << 4;
    $data = pack("vvvC", $ifnt, $ifmt, $style, $align);
    $data .= pack("CCC", self::_mapTextRotation($this->_style
      ->getAlignment()
      ->getTextRotation()), $biff8_options, $used_attrib);
    $data .= pack("VVv", $border1, $border2, $icv);
    return $header . $data;
  }

  /**
   * Is this a style XF ?
   *
   * @param boolean $value
   */
  public function setIsStyleXf($value) {
    $this->_isStyleXf = $value;
  }

  /**
   * Sets the cell's bottom border color
   *
   * @access public
   * @param int $colorIndex Color index
   */
  function setBottomColor($colorIndex) {
    $this->_bottom_color = $colorIndex;
  }

  /**
   * Sets the cell's top border color
   *
   * @access public
   * @param int $colorIndex Color index
   */
  function setTopColor($colorIndex) {
    $this->_top_color = $colorIndex;
  }

  /**
   * Sets the cell's left border color
   *
   * @access public
   * @param int $colorIndex Color index
   */
  function setLeftColor($colorIndex) {
    $this->_left_color = $colorIndex;
  }

  /**
   * Sets the cell's right border color
   *
   * @access public
   * @param int $colorIndex Color index
   */
  function setRightColor($colorIndex) {
    $this->_right_color = $colorIndex;
  }

  /**
   * Sets the cell's diagonal border color
   *
   * @access public
   * @param int $colorIndex Color index
   */
  function setDiagColor($colorIndex) {
    $this->_diag_color = $colorIndex;
  }

  /**
   * Sets the cell's foreground color
   *
   * @access public
   * @param int $colorIndex Color index
   */
  function setFgColor($colorIndex) {
    $this->_fg_color = $colorIndex;
  }

  /**
   * Sets the cell's background color
   *
   * @access public
   * @param int $colorIndex Color index
   */
  function setBgColor($colorIndex) {
    $this->_bg_color = $colorIndex;
  }

  /**
   * Sets the index to the number format record
   * It can be date, time, currency, etc...
   *
   * @access public
   * @param integer $numberFormatIndex Index to format record
   */
  function setNumberFormatIndex($numberFormatIndex) {
    $this->_numberFormatIndex = $numberFormatIndex;
  }

  /**
   * Set the font index.
   *
   * @param int $value Font index, note that value 4 does not exist
   */
  public function setFontIndex($value) {
    $this->_fontIndex = $value;
  }

  /**
   * Map of BIFF2-BIFF8 codes for border styles
   * @static	array of int
   *
   */
  private static $_mapBorderStyle = array(
    PHPExcel_Style_Border::BORDER_NONE => 0x0,
    PHPExcel_Style_Border::BORDER_THIN => 0x1,
    PHPExcel_Style_Border::BORDER_MEDIUM => 0x2,
    PHPExcel_Style_Border::BORDER_DASHED => 0x3,
    PHPExcel_Style_Border::BORDER_DOTTED => 0x4,
    PHPExcel_Style_Border::BORDER_THICK => 0x5,
    PHPExcel_Style_Border::BORDER_DOUBLE => 0x6,
    PHPExcel_Style_Border::BORDER_HAIR => 0x7,
    PHPExcel_Style_Border::BORDER_MEDIUMDASHED => 0x8,
    PHPExcel_Style_Border::BORDER_DASHDOT => 0x9,
    PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT => 0xa,
    PHPExcel_Style_Border::BORDER_DASHDOTDOT => 0xb,
    PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT => 0xc,
    PHPExcel_Style_Border::BORDER_SLANTDASHDOT => 0xd,
  );

  /**
   * Map border style
   *
   * @param string $borderStyle
   * @return int
   */
  private static function _mapBorderStyle($borderStyle) {
    if (isset(self::$_mapBorderStyle[$borderStyle])) {
      return self::$_mapBorderStyle[$borderStyle];
    }
    return 0x0;
  }

  /**
   * Map of BIFF2-BIFF8 codes for fill types
   * @static	array of int
   *
   */
  private static $_mapFillType = array(
    PHPExcel_Style_Fill::FILL_NONE => 0x0,
    PHPExcel_Style_Fill::FILL_SOLID => 0x1,
    PHPExcel_Style_Fill::FILL_PATTERN_MEDIUMGRAY => 0x2,
    PHPExcel_Style_Fill::FILL_PATTERN_DARKGRAY => 0x3,
    PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRAY => 0x4,
    PHPExcel_Style_Fill::FILL_PATTERN_DARKHORIZONTAL => 0x5,
    PHPExcel_Style_Fill::FILL_PATTERN_DARKVERTICAL => 0x6,
    PHPExcel_Style_Fill::FILL_PATTERN_DARKDOWN => 0x7,
    PHPExcel_Style_Fill::FILL_PATTERN_DARKUP => 0x8,
    PHPExcel_Style_Fill::FILL_PATTERN_DARKGRID => 0x9,
    PHPExcel_Style_Fill::FILL_PATTERN_DARKTRELLIS => 0xa,
    PHPExcel_Style_Fill::FILL_PATTERN_LIGHTHORIZONTAL => 0xb,
    PHPExcel_Style_Fill::FILL_PATTERN_LIGHTVERTICAL => 0xc,
    PHPExcel_Style_Fill::FILL_PATTERN_LIGHTDOWN => 0xd,
    PHPExcel_Style_Fill::FILL_PATTERN_LIGHTUP => 0xe,
    PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRID => 0xf,
    PHPExcel_Style_Fill::FILL_PATTERN_LIGHTTRELLIS => 0x10,
    PHPExcel_Style_Fill::FILL_PATTERN_GRAY125 => 0x11,
    PHPExcel_Style_Fill::FILL_PATTERN_GRAY0625 => 0x12,
    PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR => 0x0,
    // does not exist in BIFF8
    PHPExcel_Style_Fill::FILL_GRADIENT_PATH => 0x0,
  );

  /**
   * Map fill type
   *
   * @param string $fillType
   * @return int
   */
  private static function _mapFillType($fillType) {
    if (isset(self::$_mapFillType[$fillType])) {
      return self::$_mapFillType[$fillType];
    }
    return 0x0;
  }

  /**
   * Map of BIFF2-BIFF8 codes for horizontal alignment
   * @static	array of int
   *
   */
  private static $_mapHAlign = array(
    PHPExcel_Style_Alignment::HORIZONTAL_GENERAL => 0,
    PHPExcel_Style_Alignment::HORIZONTAL_LEFT => 1,
    PHPExcel_Style_Alignment::HORIZONTAL_CENTER => 2,
    PHPExcel_Style_Alignment::HORIZONTAL_RIGHT => 3,
    PHPExcel_Style_Alignment::HORIZONTAL_FILL => 4,
    PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY => 5,
    PHPExcel_Style_Alignment::HORIZONTAL_CENTER_CONTINUOUS => 6,
  );

  /**
   * Map to BIFF2-BIFF8 codes for horizontal alignment
   *
   * @param string $hAlign
   * @return int
   */
  private function _mapHAlign($hAlign) {
    if (isset(self::$_mapHAlign[$hAlign])) {
      return self::$_mapHAlign[$hAlign];
    }
    return 0;
  }

  /**
   * Map of BIFF2-BIFF8 codes for vertical alignment
   * @static	array of int
   *
   */
  private static $_mapVAlign = array(
    PHPExcel_Style_Alignment::VERTICAL_TOP => 0,
    PHPExcel_Style_Alignment::VERTICAL_CENTER => 1,
    PHPExcel_Style_Alignment::VERTICAL_BOTTOM => 2,
    PHPExcel_Style_Alignment::VERTICAL_JUSTIFY => 3,
  );

  /**
   * Map to BIFF2-BIFF8 codes for vertical alignment
   *
   * @param string $vAlign
   * @return int
   */
  private static function _mapVAlign($vAlign) {
    if (isset(self::$_mapVAlign[$vAlign])) {
      return self::$_mapVAlign[$vAlign];
    }
    return 2;
  }

  /**
   * Map to BIFF8 codes for text rotation angle
   *
   * @param int $textRotation
   * @return int
   */
  private static function _mapTextRotation($textRotation) {
    if ($textRotation >= 0) {
      return $textRotation;
    }
    if ($textRotation == -165) {
      return 255;
    }
    if ($textRotation < 0) {
      return 90 - $textRotation;
    }
  }

  /**
   * Map locked
   *
   * @param string
   * @return int
   */
  private static function _mapLocked($locked) {
    switch ($locked) {
      case PHPExcel_Style_Protection::PROTECTION_INHERIT:
        return 1;
      case PHPExcel_Style_Protection::PROTECTION_PROTECTED:
        return 1;
      case PHPExcel_Style_Protection::PROTECTION_UNPROTECTED:
        return 0;
      default:
        return 1;
    }
  }

  /**
   * Map hidden
   *
   * @param string
   * @return int
   */
  private static function _mapHidden($hidden) {
    switch ($hidden) {
      case PHPExcel_Style_Protection::PROTECTION_INHERIT:
        return 0;
      case PHPExcel_Style_Protection::PROTECTION_PROTECTED:
        return 1;
      case PHPExcel_Style_Protection::PROTECTION_UNPROTECTED:
        return 0;
      default:
        return 0;
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
PHPExcel_Writer_Excel5_Xf::$_bg_color public property * The cell's background color. *
PHPExcel_Writer_Excel5_Xf::$_bottom_color public property * Color of the bottom border of the cell. *
PHPExcel_Writer_Excel5_Xf::$_fg_color public property * The cell's foreground color. *
PHPExcel_Writer_Excel5_Xf::$_fontIndex private property * Index to the FONT record. Index 4 does not exist *
PHPExcel_Writer_Excel5_Xf::$_isStyleXf private property * Style XF or a cell XF ? * *
PHPExcel_Writer_Excel5_Xf::$_left_color public property * Color of the left border of the cell. *
PHPExcel_Writer_Excel5_Xf::$_mapBorderStyle private static property * Map of BIFF2-BIFF8 codes for border styles * @static array of int *
PHPExcel_Writer_Excel5_Xf::$_mapFillType private static property * Map of BIFF2-BIFF8 codes for fill types * @static array of int *
PHPExcel_Writer_Excel5_Xf::$_mapHAlign private static property * Map of BIFF2-BIFF8 codes for horizontal alignment * @static array of int *
PHPExcel_Writer_Excel5_Xf::$_mapVAlign private static property * Map of BIFF2-BIFF8 codes for vertical alignment * @static array of int *
PHPExcel_Writer_Excel5_Xf::$_numberFormatIndex public property * An index (2 bytes) to a FORMAT record (number format). *
PHPExcel_Writer_Excel5_Xf::$_right_color public property * Color of the right border of the cell. *
PHPExcel_Writer_Excel5_Xf::$_text_justlast public property * 1 bit, apparently not used. *
PHPExcel_Writer_Excel5_Xf::$_top_color public property * Color of the top border of the cell. *
PHPExcel_Writer_Excel5_Xf::setBgColor function * Sets the cell's background color * * @access public *
PHPExcel_Writer_Excel5_Xf::setBottomColor function * Sets the cell's bottom border color * * @access public *
PHPExcel_Writer_Excel5_Xf::setDiagColor function * Sets the cell's diagonal border color * * @access public *
PHPExcel_Writer_Excel5_Xf::setFgColor function * Sets the cell's foreground color * * @access public *
PHPExcel_Writer_Excel5_Xf::setFontIndex public function * Set the font index. * *
PHPExcel_Writer_Excel5_Xf::setIsStyleXf public function * Is this a style XF ? * *
PHPExcel_Writer_Excel5_Xf::setLeftColor function * Sets the cell's left border color * * @access public *
PHPExcel_Writer_Excel5_Xf::setNumberFormatIndex function * Sets the index to the number format record * It can be date, time, currency, etc... * * @access public *
PHPExcel_Writer_Excel5_Xf::setRightColor function * Sets the cell's right border color * * @access public *
PHPExcel_Writer_Excel5_Xf::setTopColor function * Sets the cell's top border color * * @access public *
PHPExcel_Writer_Excel5_Xf::writeXf function * Generate an Excel BIFF XF record (style or cell). * *
PHPExcel_Writer_Excel5_Xf::_mapBorderStyle private static function * Map border style * *
PHPExcel_Writer_Excel5_Xf::_mapFillType private static function * Map fill type * *
PHPExcel_Writer_Excel5_Xf::_mapHAlign private function * Map to BIFF2-BIFF8 codes for horizontal alignment * *
PHPExcel_Writer_Excel5_Xf::_mapHidden private static function * Map hidden * *
PHPExcel_Writer_Excel5_Xf::_mapLocked private static function * Map locked * *
PHPExcel_Writer_Excel5_Xf::_mapTextRotation private static function * Map to BIFF8 codes for text rotation angle * *
PHPExcel_Writer_Excel5_Xf::_mapVAlign private static function * Map to BIFF2-BIFF8 codes for vertical alignment * *
PHPExcel_Writer_Excel5_Xf::__construct public function * Constructor * * @access public *