| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352 | <?php/** * PHPExcel_Writer_CSV * * Copyright (c) 2006 - 2015 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 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel) * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL * @version    ##VERSION##, ##DATE## */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 Separator line as the first line of the file     *     sep=x     *     * @var boolean     */    private $includeSeparatorLine = 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) {            $this->setUseBOM(true);                //  Enforce UTF-8 BOM Header            $this->setIncludeSeparatorLine(true);  //  Set separator line            $this->setEnclosure('"');              //  Set enclosure to "            $this->setDelimiter(";");              //  Set delimiter to a semi-colon            $this->setLineEnding("\r\n");        }        if ($this->useBOM) {            // Write the UTF-8 BOM code if required            fwrite($fileHandle, "\xEF\xBB\xBF");        }        if ($this->includeSeparatorLine) {            // Write the separator line if required            fwrite($fileHandle, 'sep=' . $this->getDelimiter() . $this->lineEnding);        }        //    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 a separator line should be included     *     * @return boolean     */    public function getIncludeSeparatorLine()    {        return $this->includeSeparatorLine;    }    /**     * Set whether a separator line should be included as the first line of the file     *     * @param    boolean    $pValue        Use separator line? Defaults to false     * @return PHPExcel_Writer_CSV     */    public function setIncludeSeparatorLine($pValue = false)    {        $this->includeSeparatorLine = $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.");        }    }}
 |