Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** PHPExcel** Copyright (c) 2006 - 2013 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* @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL* @version ##VERSION##, ##DATE##*//** PHPExcel root directory */if (!defined('PHPEXCEL_ROOT')) {/*** @ignore*/define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../');require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');}/*** PHPExcel_IOFactory** @category PHPExcel* @package PHPExcel* @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)*/class PHPExcel_IOFactory{/*** Search locations** @var array* @access private* @static*/private static $_searchLocations = array(array( 'type' => 'IWriter', 'path' => 'PHPExcel/Writer/{0}.php', 'class' => 'PHPExcel_Writer_{0}' ),array( 'type' => 'IReader', 'path' => 'PHPExcel/Reader/{0}.php', 'class' => 'PHPExcel_Reader_{0}' ));/*** Autoresolve classes** @var array* @access private* @static*/private static $_autoResolveClasses = array('Excel2007','Excel5','Excel2003XML','OOCalc','SYLK','Gnumeric','HTML','CSV',);/*** Private constructor for PHPExcel_IOFactory*/private function __construct() { }/*** Get search locations** @static* @access public* @return array*/public static function getSearchLocations() {return self::$_searchLocations;} // function getSearchLocations()/*** Set search locations** @static* @access public* @param array $value* @throws PHPExcel_Reader_Exception*/public static function setSearchLocations($value) {if (is_array($value)) {self::$_searchLocations = $value;} else {throw new PHPExcel_Reader_Exception('Invalid parameter passed.');}} // function setSearchLocations()/*** Add search location** @static* @access public* @param string $type Example: IWriter* @param string $location Example: PHPExcel/Writer/{0}.php* @param string $classname Example: PHPExcel_Writer_{0}*/public static function addSearchLocation($type = '', $location = '', $classname = '') {self::$_searchLocations[] = array( 'type' => $type, 'path' => $location, 'class' => $classname );} // function addSearchLocation()/*** Create PHPExcel_Writer_IWriter** @static* @access public* @param PHPExcel $phpExcel* @param string $writerType Example: Excel2007* @return PHPExcel_Writer_IWriter* @throws PHPExcel_Reader_Exception*/public static function createWriter(PHPExcel $phpExcel, $writerType = '') {// Search type$searchType = 'IWriter';// Include classforeach (self::$_searchLocations as $searchLocation) {if ($searchLocation['type'] == $searchType) {$className = str_replace('{0}', $writerType, $searchLocation['class']);$instance = new $className($phpExcel);if ($instance !== NULL) {return $instance;}}}// Nothing found...throw new PHPExcel_Reader_Exception("No $searchType found for type $writerType");} // function createWriter()/*** Create PHPExcel_Reader_IReader** @static* @access public* @param string $readerType Example: Excel2007* @return PHPExcel_Reader_IReader* @throws PHPExcel_Reader_Exception*/public static function createReader($readerType = '') {// Search type$searchType = 'IReader';// Include classforeach (self::$_searchLocations as $searchLocation) {if ($searchLocation['type'] == $searchType) {$className = str_replace('{0}', $readerType, $searchLocation['class']);$instance = new $className();if ($instance !== NULL) {return $instance;}}}// Nothing found...throw new PHPExcel_Reader_Exception("No $searchType found for type $readerType");} // function createReader()/*** Loads PHPExcel from file using automatic PHPExcel_Reader_IReader resolution** @static* @access public* @param string $pFilename The name of the spreadsheet file* @return PHPExcel* @throws PHPExcel_Reader_Exception*/public static function load($pFilename) {$reader = self::createReaderForFile($pFilename);return $reader->load($pFilename);} // function load()/*** Identify file type using automatic PHPExcel_Reader_IReader resolution** @static* @access public* @param string $pFilename The name of the spreadsheet file to identify* @return string* @throws PHPExcel_Reader_Exception*/public static function identify($pFilename) {$reader = self::createReaderForFile($pFilename);$className = get_class($reader);$classType = explode('_',$className);unset($reader);return array_pop($classType);} // function identify()/*** Create PHPExcel_Reader_IReader for file using automatic PHPExcel_Reader_IReader resolution** @static* @access public* @param string $pFilename The name of the spreadsheet file* @return PHPExcel_Reader_IReader* @throws PHPExcel_Reader_Exception*/public static function createReaderForFile($pFilename) {// First, lucky guess by inspecting file extension$pathinfo = pathinfo($pFilename);$extensionType = NULL;if (isset($pathinfo['extension'])) {switch (strtolower($pathinfo['extension'])) {case 'xlsx': // Excel (OfficeOpenXML) Spreadsheetcase 'xlsm': // Excel (OfficeOpenXML) Macro Spreadsheet (macros will be discarded)case 'xltx': // Excel (OfficeOpenXML) Templatecase 'xltm': // Excel (OfficeOpenXML) Macro Template (macros will be discarded)$extensionType = 'Excel2007';break;case 'xls': // Excel (BIFF) Spreadsheetcase 'xlt': // Excel (BIFF) Template$extensionType = 'Excel5';break;case 'ods': // Open/Libre Offic Calccase 'ots': // Open/Libre Offic Calc Template$extensionType = 'OOCalc';break;case 'slk':$extensionType = 'SYLK';break;case 'xml': // Excel 2003 SpreadSheetML$extensionType = 'Excel2003XML';break;case 'gnumeric':$extensionType = 'Gnumeric';break;case 'htm':case 'html':$extensionType = 'HTML';break;case 'csv':// Do nothing// We must not try to use CSV reader since it loads// all files including Excel files etc.break;default:break;}if ($extensionType !== NULL) {$reader = self::createReader($extensionType);// Let's see if we are luckyif (isset($reader) && $reader->canRead($pFilename)) {return $reader;}}}// If we reach here then "lucky guess" didn't give any result// Try walking through all the options in self::$_autoResolveClassesforeach (self::$_autoResolveClasses as $autoResolveClass) {// Ignore our original guess, we know that won't workif ($autoResolveClass !== $extensionType) {$reader = self::createReader($autoResolveClass);if ($reader->canRead($pFilename)) {return $reader;}}}throw new PHPExcel_Reader_Exception('Unable to identify a reader for this file');} // function createReaderForFile()}