当前位置: 首页 > 工具软件 > RockOA > 使用案例 >

phpexcel/iofactory.php,include/PHPExcel/IOFactory.php · Amamatthew/rockoa - Gitee.com

崔高远
2023-12-01

/**

* 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

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

* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txtLGPL

* @version 1.8.0, 2014-03-02

*/

/**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 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)

*/

class PHPExcel_IOFactory

{

/**

* Search locations

*

* @vararray

* @accessprivate

* @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

*

* @vararray

* @accessprivate

* @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

* @accesspublic

* @returnarray

*/

public static function getSearchLocations() {

return self::$_searchLocations;

}//function getSearchLocations()

/**

* Set search locations

*

* @static

* @accesspublic

* @paramarray $value

* @throwsPHPExcel_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

* @accesspublic

* @paramstring $typeExample: IWriter

* @paramstring $locationExample: PHPExcel/Writer/{0}.php

* @paramstring $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

* @accesspublic

* @paramPHPExcel $phpExcel

* @paramstring $writerTypeExample: Excel2007

* @returnPHPExcel_Writer_IWriter

* @throwsPHPExcel_Reader_Exception

*/

public static function createWriter(PHPExcel $phpExcel, $writerType = '') {

// Search type

$searchType = 'IWriter';

// Include class

foreach (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

* @accesspublic

* @paramstring $readerTypeExample: Excel2007

* @returnPHPExcel_Reader_IReader

* @throwsPHPExcel_Reader_Exception

*/

public static function createReader($readerType = '') {

// Search type

$searchType = 'IReader';

// Include class

foreach (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 $pFilenameThe name of the spreadsheet file

* @returnPHPExcel

* @throwsPHPExcel_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 $pFilenameThe name of the spreadsheet file to identify

* @returnstring

* @throwsPHPExcel_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

* @accesspublic

* @param string $pFilenameThe name of the spreadsheet file

* @returnPHPExcel_Reader_IReader

* @throwsPHPExcel_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) Spreadsheet

case 'xlsm'://Excel (OfficeOpenXML) Macro Spreadsheet (macros will be discarded)

case 'xltx'://Excel (OfficeOpenXML) Template

case 'xltm'://Excel (OfficeOpenXML) Macro Template (macros will be discarded)

$extensionType = 'Excel2007';

break;

case 'xls'://Excel (BIFF) Spreadsheet

case 'xlt'://Excel (BIFF) Template

$extensionType = 'Excel5';

break;

case 'ods'://Open/Libre Offic Calc

case '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 lucky

if (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::$_autoResolveClasses

foreach (self::$_autoResolveClasses as $autoResolveClass) {

//Ignore our original guess, we know that won't work

if ($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()

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

 类似资料: