You are here

CSV.php in Loft Data Grids 6.2

File

vendor/phpoffice/phpexcel/Classes/PHPExcel/Writer/CSV.php
View source
<?php

/**
 * PHPExcel
 *
 * Copyright (c) 2006 - 2014 PHPExcel
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @category   PHPExcel
 * @package	PHPExcel_Writer_CSV
 * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
 * @license	http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
 * @version	##VERSION##, ##DATE##
 */

/**
 * PHPExcel_Writer_CSV
 *
 * @category   PHPExcel
 * @package	PHPExcel_Writer_CSV
 * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
 */
class PHPExcel_Writer_CSV extends PHPExcel_Writer_Abstract implements PHPExcel_Writer_IWriter {

  /**
   * PHPExcel object
   *
   * @var PHPExcel
   */
  private $_phpExcel;

  /**
   * Delimiter
   *
   * @var string
   */
  private $_delimiter = ',';

  /**
   * Enclosure
   *
   * @var string
   */
  private $_enclosure = '"';

  /**
   * Line ending
   *
   * @var string
   */
  private $_lineEnding = PHP_EOL;

  /**
   * Sheet index to write
   *
   * @var int
   */
  private $_sheetIndex = 0;

  /**
   * Whether to write a BOM (for UTF8).
   *
   * @var boolean
   */
  private $_useBOM = false;

  /**
   * Whether to write a fully Excel compatible CSV file.
   *
   * @var boolean
   */
  private $_excelCompatibility = false;

  /**
   * Create a new PHPExcel_Writer_CSV
   *
   * @param	PHPExcel	$phpExcel	PHPExcel object
   */
  public function __construct(PHPExcel $phpExcel) {
    $this->_phpExcel = $phpExcel;
  }

  /**
   * Save PHPExcel to file
   *
   * @param	string		$pFilename
   * @throws	PHPExcel_Writer_Exception
   */
  public function save($pFilename = null) {

    // Fetch sheet
    $sheet = $this->_phpExcel
      ->getSheet($this->_sheetIndex);
    $saveDebugLog = PHPExcel_Calculation::getInstance($this->_phpExcel)
      ->getDebugLog()
      ->getWriteDebugLog();
    PHPExcel_Calculation::getInstance($this->_phpExcel)
      ->getDebugLog()
      ->setWriteDebugLog(FALSE);
    $saveArrayReturnType = PHPExcel_Calculation::getArrayReturnType();
    PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE);

    // Open file
    $fileHandle = fopen($pFilename, 'wb+');
    if ($fileHandle === false) {
      throw new PHPExcel_Writer_Exception("Could not open file {$pFilename} for writing.");
    }
    if ($this->_excelCompatibility) {
      fwrite($fileHandle, "");

      //	Enforce UTF-8 BOM Header
      $this
        ->setEnclosure('"');

      //	Set enclosure to "
      $this
        ->setDelimiter(";");

      //	Set delimiter to a semi-colon
      $this
        ->setLineEnding("\r\n");
      fwrite($fileHandle, 'sep=' . $this
        ->getDelimiter() . $this->_lineEnding);
    }
    elseif ($this->_useBOM) {

      // Write the UTF-8 BOM code if required
      fwrite($fileHandle, "");
    }

    //	Identify the range that we need to extract from the worksheet
    $maxCol = $sheet
      ->getHighestDataColumn();
    $maxRow = $sheet
      ->getHighestDataRow();

    // Write rows to file
    for ($row = 1; $row <= $maxRow; ++$row) {

      // Convert the row to an array...
      $cellsArray = $sheet
        ->rangeToArray('A' . $row . ':' . $maxCol . $row, '', $this->_preCalculateFormulas);

      // ... and write to the file
      $this
        ->_writeLine($fileHandle, $cellsArray[0]);
    }

    // Close file
    fclose($fileHandle);
    PHPExcel_Calculation::setArrayReturnType($saveArrayReturnType);
    PHPExcel_Calculation::getInstance($this->_phpExcel)
      ->getDebugLog()
      ->setWriteDebugLog($saveDebugLog);
  }

  /**
   * Get delimiter
   *
   * @return string
   */
  public function getDelimiter() {
    return $this->_delimiter;
  }

  /**
   * Set delimiter
   *
   * @param	string	$pValue		Delimiter, defaults to ,
   * @return PHPExcel_Writer_CSV
   */
  public function setDelimiter($pValue = ',') {
    $this->_delimiter = $pValue;
    return $this;
  }

  /**
   * Get enclosure
   *
   * @return string
   */
  public function getEnclosure() {
    return $this->_enclosure;
  }

  /**
   * Set enclosure
   *
   * @param	string	$pValue		Enclosure, defaults to "
   * @return PHPExcel_Writer_CSV
   */
  public function setEnclosure($pValue = '"') {
    if ($pValue == '') {
      $pValue = null;
    }
    $this->_enclosure = $pValue;
    return $this;
  }

  /**
   * Get line ending
   *
   * @return string
   */
  public function getLineEnding() {
    return $this->_lineEnding;
  }

  /**
   * Set line ending
   *
   * @param	string	$pValue		Line ending, defaults to OS line ending (PHP_EOL)
   * @return PHPExcel_Writer_CSV
   */
  public function setLineEnding($pValue = PHP_EOL) {
    $this->_lineEnding = $pValue;
    return $this;
  }

  /**
   * Get whether BOM should be used
   *
   * @return boolean
   */
  public function getUseBOM() {
    return $this->_useBOM;
  }

  /**
   * Set whether BOM should be used
   *
   * @param	boolean	$pValue		Use UTF-8 byte-order mark? Defaults to false
   * @return PHPExcel_Writer_CSV
   */
  public function setUseBOM($pValue = false) {
    $this->_useBOM = $pValue;
    return $this;
  }

  /**
   * Get whether the file should be saved with full Excel Compatibility
   *
   * @return boolean
   */
  public function getExcelCompatibility() {
    return $this->_excelCompatibility;
  }

  /**
   * Set whether the file should be saved with full Excel Compatibility
   *
   * @param	boolean	$pValue		Set the file to be written as a fully Excel compatible csv file
   *								Note that this overrides other settings such as useBOM, enclosure and delimiter
   * @return PHPExcel_Writer_CSV
   */
  public function setExcelCompatibility($pValue = false) {
    $this->_excelCompatibility = $pValue;
    return $this;
  }

  /**
   * Get sheet index
   *
   * @return int
   */
  public function getSheetIndex() {
    return $this->_sheetIndex;
  }

  /**
   * Set sheet index
   *
   * @param	int		$pValue		Sheet index
   * @return PHPExcel_Writer_CSV
   */
  public function setSheetIndex($pValue = 0) {
    $this->_sheetIndex = $pValue;
    return $this;
  }

  /**
   * Write line to CSV file
   *
   * @param	mixed	$pFileHandle	PHP filehandle
   * @param	array	$pValues		Array containing values in a row
   * @throws	PHPExcel_Writer_Exception
   */
  private function _writeLine($pFileHandle = null, $pValues = null) {
    if (is_array($pValues)) {

      // No leading delimiter
      $writeDelimiter = false;

      // Build the line
      $line = '';
      foreach ($pValues as $element) {

        // Escape enclosures
        $element = str_replace($this->_enclosure, $this->_enclosure . $this->_enclosure, $element);

        // Add delimiter
        if ($writeDelimiter) {
          $line .= $this->_delimiter;
        }
        else {
          $writeDelimiter = true;
        }

        // Add enclosed string
        $line .= $this->_enclosure . $element . $this->_enclosure;
      }

      // Add line ending
      $line .= $this->_lineEnding;

      // Write to file
      fwrite($pFileHandle, $line);
    }
    else {
      throw new PHPExcel_Writer_Exception("Invalid data row passed to CSV writer.");
    }
  }

}

Classes

Namesort descending Description
PHPExcel_Writer_CSV PHPExcel_Writer_CSV