You are here

class PHPExcel_Writer_Excel2007_StringTable in Loft Data Grids 6.2

Same name and namespace in other branches
  1. 7.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel2007/StringTable.php \PHPExcel_Writer_Excel2007_StringTable

PHPExcel_Writer_Excel2007_StringTable

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

Hierarchy

Expanded class hierarchy of PHPExcel_Writer_Excel2007_StringTable

1 string reference to 'PHPExcel_Writer_Excel2007_StringTable'
PHPExcel_Writer_Excel2007::__construct in vendor/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel2007.php
Create a new PHPExcel_Writer_Excel2007

File

vendor/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel2007/StringTable.php, line 36

View source
class PHPExcel_Writer_Excel2007_StringTable extends PHPExcel_Writer_Excel2007_WriterPart {

  /**
   * Create worksheet stringtable
   *
   * @param 	PHPExcel_Worksheet 	$pSheet				Worksheet
   * @param 	string[] 				$pExistingTable 	Existing table to eventually merge with
   * @return 	string[] 				String table for worksheet
   * @throws 	PHPExcel_Writer_Exception
   */
  public function createStringTable($pSheet = null, $pExistingTable = null) {
    if ($pSheet !== NULL) {

      // Create string lookup table
      $aStringTable = array();
      $cellCollection = null;
      $aFlippedStringTable = null;

      // For faster lookup
      // Is an existing table given?
      if ($pExistingTable !== NULL && is_array($pExistingTable)) {
        $aStringTable = $pExistingTable;
      }

      // Fill index array
      $aFlippedStringTable = $this
        ->flipStringTable($aStringTable);

      // Loop through cells
      foreach ($pSheet
        ->getCellCollection() as $cellID) {
        $cell = $pSheet
          ->getCell($cellID);
        $cellValue = $cell
          ->getValue();
        if (!is_object($cellValue) && $cellValue !== NULL && $cellValue !== '' && !isset($aFlippedStringTable[$cellValue]) && ($cell
          ->getDataType() == PHPExcel_Cell_DataType::TYPE_STRING || $cell
          ->getDataType() == PHPExcel_Cell_DataType::TYPE_STRING2 || $cell
          ->getDataType() == PHPExcel_Cell_DataType::TYPE_NULL)) {
          $aStringTable[] = $cellValue;
          $aFlippedStringTable[$cellValue] = true;
        }
        elseif ($cellValue instanceof PHPExcel_RichText && $cellValue !== NULL && !isset($aFlippedStringTable[$cellValue
          ->getHashCode()])) {
          $aStringTable[] = $cellValue;
          $aFlippedStringTable[$cellValue
            ->getHashCode()] = true;
        }
      }

      // Return
      return $aStringTable;
    }
    else {
      throw new PHPExcel_Writer_Exception("Invalid PHPExcel_Worksheet object passed.");
    }
  }

  /**
   * Write string table to XML format
   *
   * @param 	string[] 	$pStringTable
   * @return 	string 		XML Output
   * @throws 	PHPExcel_Writer_Exception
   */
  public function writeStringTable($pStringTable = null) {
    if ($pStringTable !== NULL) {

      // Create XML writer
      $objWriter = null;
      if ($this
        ->getParentWriter()
        ->getUseDiskCaching()) {
        $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this
          ->getParentWriter()
          ->getDiskCachingDirectory());
      }
      else {
        $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);
      }

      // XML header
      $objWriter
        ->startDocument('1.0', 'UTF-8', 'yes');

      // String table
      $objWriter
        ->startElement('sst');
      $objWriter
        ->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main');
      $objWriter
        ->writeAttribute('uniqueCount', count($pStringTable));

      // Loop through string table
      foreach ($pStringTable as $textElement) {
        $objWriter
          ->startElement('si');
        if (!$textElement instanceof PHPExcel_RichText) {
          $textToWrite = PHPExcel_Shared_String::ControlCharacterPHP2OOXML($textElement);
          $objWriter
            ->startElement('t');
          if ($textToWrite !== trim($textToWrite)) {
            $objWriter
              ->writeAttribute('xml:space', 'preserve');
          }
          $objWriter
            ->writeRawData($textToWrite);
          $objWriter
            ->endElement();
        }
        else {
          if ($textElement instanceof PHPExcel_RichText) {
            $this
              ->writeRichText($objWriter, $textElement);
          }
        }
        $objWriter
          ->endElement();
      }
      $objWriter
        ->endElement();

      // Return
      return $objWriter
        ->getData();
    }
    else {
      throw new PHPExcel_Writer_Exception("Invalid string table array passed.");
    }
  }

  /**
   * Write Rich Text
   *
   * @param 	PHPExcel_Shared_XMLWriter	$objWriter 		XML Writer
   * @param 	PHPExcel_RichText			$pRichText		Rich text
   * @param 	string						$prefix			Optional Namespace prefix
   * @throws 	PHPExcel_Writer_Exception
   */
  public function writeRichText(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_RichText $pRichText = null, $prefix = NULL) {
    if ($prefix !== NULL) {
      $prefix .= ':';
    }

    // Loop through rich text elements
    $elements = $pRichText
      ->getRichTextElements();
    foreach ($elements as $element) {

      // r
      $objWriter
        ->startElement($prefix . 'r');

      // rPr
      if ($element instanceof PHPExcel_RichText_Run) {

        // rPr
        $objWriter
          ->startElement($prefix . 'rPr');

        // rFont
        $objWriter
          ->startElement($prefix . 'rFont');
        $objWriter
          ->writeAttribute('val', $element
          ->getFont()
          ->getName());
        $objWriter
          ->endElement();

        // Bold
        $objWriter
          ->startElement($prefix . 'b');
        $objWriter
          ->writeAttribute('val', $element
          ->getFont()
          ->getBold() ? 'true' : 'false');
        $objWriter
          ->endElement();

        // Italic
        $objWriter
          ->startElement($prefix . 'i');
        $objWriter
          ->writeAttribute('val', $element
          ->getFont()
          ->getItalic() ? 'true' : 'false');
        $objWriter
          ->endElement();

        // Superscript / subscript
        if ($element
          ->getFont()
          ->getSuperScript() || $element
          ->getFont()
          ->getSubScript()) {
          $objWriter
            ->startElement($prefix . 'vertAlign');
          if ($element
            ->getFont()
            ->getSuperScript()) {
            $objWriter
              ->writeAttribute('val', 'superscript');
          }
          else {
            if ($element
              ->getFont()
              ->getSubScript()) {
              $objWriter
                ->writeAttribute('val', 'subscript');
            }
          }
          $objWriter
            ->endElement();
        }

        // Strikethrough
        $objWriter
          ->startElement($prefix . 'strike');
        $objWriter
          ->writeAttribute('val', $element
          ->getFont()
          ->getStrikethrough() ? 'true' : 'false');
        $objWriter
          ->endElement();

        // Color
        $objWriter
          ->startElement($prefix . 'color');
        $objWriter
          ->writeAttribute('rgb', $element
          ->getFont()
          ->getColor()
          ->getARGB());
        $objWriter
          ->endElement();

        // Size
        $objWriter
          ->startElement($prefix . 'sz');
        $objWriter
          ->writeAttribute('val', $element
          ->getFont()
          ->getSize());
        $objWriter
          ->endElement();

        // Underline
        $objWriter
          ->startElement($prefix . 'u');
        $objWriter
          ->writeAttribute('val', $element
          ->getFont()
          ->getUnderline());
        $objWriter
          ->endElement();
        $objWriter
          ->endElement();
      }

      // t
      $objWriter
        ->startElement($prefix . 't');
      $objWriter
        ->writeAttribute('xml:space', 'preserve');
      $objWriter
        ->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML($element
        ->getText()));
      $objWriter
        ->endElement();
      $objWriter
        ->endElement();
    }
  }

  /**
   * Write Rich Text
   *
   * @param 	PHPExcel_Shared_XMLWriter	$objWriter 		XML Writer
   * @param 	string|PHPExcel_RichText	$pRichText		text string or Rich text
   * @param 	string						$prefix			Optional Namespace prefix
   * @throws 	PHPExcel_Writer_Exception
   */
  public function writeRichTextForCharts(PHPExcel_Shared_XMLWriter $objWriter = null, $pRichText = null, $prefix = NULL) {
    if (!$pRichText instanceof PHPExcel_RichText) {
      $textRun = $pRichText;
      $pRichText = new PHPExcel_RichText();
      $pRichText
        ->createTextRun($textRun);
    }
    if ($prefix !== NULL) {
      $prefix .= ':';
    }

    // Loop through rich text elements
    $elements = $pRichText
      ->getRichTextElements();
    foreach ($elements as $element) {

      // r
      $objWriter
        ->startElement($prefix . 'r');

      // rPr
      $objWriter
        ->startElement($prefix . 'rPr');

      // Bold
      $objWriter
        ->writeAttribute('b', $element
        ->getFont()
        ->getBold() ? 1 : 0);

      // Italic
      $objWriter
        ->writeAttribute('i', $element
        ->getFont()
        ->getItalic() ? 1 : 0);

      // Underline
      $underlineType = $element
        ->getFont()
        ->getUnderline();
      switch ($underlineType) {
        case 'single':
          $underlineType = 'sng';
          break;
        case 'double':
          $underlineType = 'dbl';
          break;
      }
      $objWriter
        ->writeAttribute('u', $underlineType);

      // Strikethrough
      $objWriter
        ->writeAttribute('strike', $element
        ->getFont()
        ->getStrikethrough() ? 'sngStrike' : 'noStrike');

      // rFont
      $objWriter
        ->startElement($prefix . 'latin');
      $objWriter
        ->writeAttribute('typeface', $element
        ->getFont()
        ->getName());
      $objWriter
        ->endElement();

      // Superscript / subscript
      //					if ($element->getFont()->getSuperScript() || $element->getFont()->getSubScript()) {
      //						$objWriter->startElement($prefix.'vertAlign');
      //						if ($element->getFont()->getSuperScript()) {
      //							$objWriter->writeAttribute('val', 'superscript');
      //						} else if ($element->getFont()->getSubScript()) {
      //							$objWriter->writeAttribute('val', 'subscript');
      //						}
      //						$objWriter->endElement();
      //					}
      //
      $objWriter
        ->endElement();

      // t
      $objWriter
        ->startElement($prefix . 't');

      //					$objWriter->writeAttribute('xml:space', 'preserve');	//	Excel2010 accepts, Excel2007 complains
      $objWriter
        ->writeRawData(PHPExcel_Shared_String::ControlCharacterPHP2OOXML($element
        ->getText()));
      $objWriter
        ->endElement();
      $objWriter
        ->endElement();
    }
  }

  /**
   * Flip string table (for index searching)
   *
   * @param 	array	$stringTable	Stringtable
   * @return 	array
   */
  public function flipStringTable($stringTable = array()) {

    // Return value
    $returnValue = array();

    // Loop through stringtable and add flipped items to $returnValue
    foreach ($stringTable as $key => $value) {
      if (!$value instanceof PHPExcel_RichText) {
        $returnValue[$value] = $key;
      }
      else {
        if ($value instanceof PHPExcel_RichText) {
          $returnValue[$value
            ->getHashCode()] = $key;
        }
      }
    }

    // Return
    return $returnValue;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
PHPExcel_Writer_Excel2007_StringTable::createStringTable public function * Create worksheet stringtable * *
PHPExcel_Writer_Excel2007_StringTable::flipStringTable public function * Flip string table (for index searching) * *
PHPExcel_Writer_Excel2007_StringTable::writeRichText public function * Write Rich Text * *
PHPExcel_Writer_Excel2007_StringTable::writeRichTextForCharts public function * Write Rich Text * *
PHPExcel_Writer_Excel2007_StringTable::writeStringTable public function * Write string table to XML format * *
PHPExcel_Writer_Excel2007_WriterPart::$_parentWriter private property * Parent IWriter object * *
PHPExcel_Writer_Excel2007_WriterPart::getParentWriter public function * Get parent IWriter object * *
PHPExcel_Writer_Excel2007_WriterPart::setParentWriter public function * Set parent IWriter object * *
PHPExcel_Writer_Excel2007_WriterPart::__construct public function * Set parent IWriter object * *