Professional Documents
Culture Documents
Contenido
Documentacin del usuario PHPExcel lectura de archivos de hoja de clculo 1. Formatos de archivo de hoja de clculo 2. Carga un archivo de hoja de clculo 3. Crear un lector y cargar un archivo de hoja de clculo 4. Opciones de lector de hoja de clculo 4.1. Leer slo los datos desde un archivo de hoja de clculo 4.2. Lectura llamado solamente las hojas de clculo de un archivo 4.3. Lectura especfico slo columnas y filas de un archivo (filtros de lectura) 4.4. Combina varios archivos en un nico objeto PHPExcel 4.5. Filtros leer combinando con el setSheetIndex() mtodo para dividir un archivo CSV grande a travs de mltiples hojas de trabajo 4.6. Pipa o ficha valor archivos separados 4.7. Unas breves palabras sobre la carpeta del valor avanzado 5. Manejo de errores 6. Mtodos auxiliares
Excel5
Formato de archivo binario de la Microsoft Excel (BIFF5 y BIFF8) es un formato de archivo binario que fue usado por Microsoft Excel entre versiones 95 y 2003. El formato es compatible (en diferentes grados) por mayora de los programas de hoja de clculo. BIFF archivos normalmente tienen una extensin de XLS. Documentacin que describe el formato puede encontrarse en lnea en http://msdn.microsoft.com/en-us/library/cc313154 (v=office.12).aspx o de http://download.microsoft.com/download/2/4/8/24862317-78F0-4C4B-B355C7B2C1D997DB/ [MS-XLS] .pdf (como un PDF descargable).
Excel2003XML
Microsoft Excel 2003 incluye opciones para un formato de archivo llamado SpreadsheetML. Este archivo es un documento XML con cremallera. No es muy comn, pero sus caractersticas fundamentales son compatibles. Documentacin para el formato puede encontrarse en http://msdn.microsoft.com/enus/library/aa140066%28office.10%29.aspx , aunque por desgracia es bastante escaso en sus detalles.
Excel2007
Microsoft Excel 2007 enva con un nuevo formato de archivo , es decir Microsoft Office Open XML SpreadsheetML, y Excel 2010 ampli esta an ms con sus nuevas caractersticas tales como sparklines. Normalmente, estos archivos tienen la extensin de .xlsx. Este formato se basa en una coleccin con cremallera de eXtensible Markup Language (XML) archivos. Microsoft Office Open XML SpreadsheetML mayormente est estandarizada en ECMA 376 (http://www.ecmainternational.org/news/TC45_current_work/TC45_available_docs.htm) e ISO 29500.
OOCalc
tambin conocido como Open Document Format (ODF) o OASIS, este es el formato de archivo XML de OpenOffice.org para hojas de clculo. Se compone de un archivo zip que incluye varios componentes que son archivos de texto, la mayora de ellas con marcado en el lenguaje de marcado eXtensible (XML). Es el formato de archivo estndar para OpenOffice.org Calc y StarCalc y archivos suelen tienen una extensin de .ods. La especificacin publicada para el formato de archivo est disponible desde la pgina web OASIS Open Office XML formato Comit Tcnico (http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=office#technical). Otra informacin est disponible en la pgina web de OpenOffice.org XML File Format (http://xml.openoffice.org/general.html), parte del proyecto OpenOffice.org.
SYLK
Este es el formato de archivo de Microsoft Multiplan simblico Link Interchange (SYLK). Multiplan fue el predecesor de Microsoft Excel . Normalmente, los archivos tienen una extensin de .slk. Aunque no es comn, que todava hay algunas aplicaciones que generan archivos SYLK como opcin multiplataforma, porque (a pesar de estar limitado a una sola hoja de clculo) es un formato simple de implementar y es compatible con algunos datos bsicos y formato de celda opciones (a diferencia de archivos CSV).
Gnumeric
El formato de archivo de Gnumeric es utilizado por la aplicacin de la hoja de clculo Gnumeric Gnome, y normalmente los archivos tienen una extensin de .gnumeric. El contenido del archivo se almacena utilizando eXtensible markup Markup Language (XML), y el archivo se comprime utilizando la biblioteca de compresin gzip del proyecto GNU. http://projects.gnome.org/Gnumeric/doc/File-FormatGnumeric.shtml
CSV
Formato de archivo de valores separados (CSV) coma es una estrategia comn de estructuracin para archivos de formato de texto. En las moscas CSV, cada lnea del archivo representa una fila de datos y (dentro de cada lnea del archivo) los datos diferentes campos (o columnas) estn separadas entre s mediante una coma (","). Si un campo de datos contiene una coma, entonces se debe adjuntar (tpicamente entre comillas (''). A veces las lengetas "\t" o el smbolo de la pipa ("|") se utilizan como separadores en lugar de una coma. CSV es un formato de slo texto, no apoya ningn dato opciones de formato.
El mtodo load() tratar de identificar el tipo de archivo y crear instancias de un cargador para ese tipo de archivo; usando para cargar el archivo y guardar los datos y cualquier formato en un objeto PHPExcel. El mtodo hace una suposicin inicial en el cargador para crear una instancia basada en la extensin de archivo; Pero pondr a prueba el archivo antes de ejecutar efectivamente la carga: as que si (por ejemplo) el archivo es en realidad un archivo CSV que se ha dado una extensin .xls (una prctica comn), rechazar el loader Excel5 que normalmente utilizara para un archivo .xls; Pruebe el archivo usando los otros cargadores hasta que encuentra el cargador apropiado y entonces usar eso para leer el archivo. Mientras que es fcil de implementar en su cdigo, y no tienes que preocuparte por el tipo de archivo; Este no es el mtodo ms eficiente para cargar un archivo; y carece de la flexibilidad para configurar el loader en modo alguno antes de realmente leer el archivo en un objeto PHPExcel.
Alternativamente, puede utilizar mtodo createReader() de la fbrica de IO para crear una instancia del objeto lector para ti, simplemente diciendo el tipo de archivo del lector que quieres crear instancias. $inputFileType = 'Excel5'; // $inputFileType = 'Excel2007'; // $inputFileType = 'Excel2003XML'; // $inputFileType = 'OOCalc'; // $inputFileType = 'SYLK'; // $inputFileType = 'Gnumeric'; // $inputFileType = 'CSV'; $inputFileName = './sampleData/example1.xls'; /** Create a new Reader of the type defined in $inputFileType $objReader = PHPExcel_IOFactory::createReader($inputFileType); /** Load $inputFileName to a PHPExcel Object **/ $objPHPExcel = $objReader->load($inputFileName); **/
Si usted es incierto del tipo de archivo, puede utilizar mtodo identify() de la fbrica de IO para identificar al lector que usted necesita, antes de utilizar el mtodo createReader() para crear una instancia del objeto lector. $inputFileName = './sampleData/example1.xls'; /** Identify the type of $inputFileName **/ $inputFileType = PHPExcel_IOFactory::identify($inputFileName); /** Create a new Reader of the type that has been identified **/
$objReader = PHPExcel_IOFactory::createReader($inputFileType); /** Load $inputFileName to a PHPExcel Object **/ $objPHPExcel = $objReader->load($inputFileName);
Es importante sealar que los libros (y PHPExcel) almacenan fechas y horas como valores numricos simples: slo pueden ser distinguidos de otros valores numricos por la mscara de formato que se aplica a la celda. Cuando ajuste leer datos slo en true, PHPExcel no lea las mscaras de formato de celdas, as que no es posible diferenciar entre fechas y nmeros. El cargador Gnumeric ha sido escrito para leer las mscaras de formato para valores de fecha incluso cuando lee datos slo se ha establecido en true, as que puede distinguir entre fechas y nmeros; Pero este cambio todava no ha sido implementado para los otros lectores. Lectura de datos slo de un archivo de hoja de clculo se aplica a los lectores: Excel2007 Excel2003XML Excel5 S S OOCalc no S SYLK Gnumeric S CSV NO
Si quieres leer ms que una sola hoja, puede pasar una lista de nombres de hoja como un parmetro de matriz con el mtodo setLoadSheetsOnly(). $inputFileType = 'Excel5'; $inputFileName = './sampleData/example1.xls'; $sheetnames = array('Data Sheet #1','Data Sheet #3'); /** Create a new Reader of the type defined in $inputFileType **/ $objReader = PHPExcel_IOFactory::createReader($inputFileType); /** Advise the Reader of which WorkSheets we want to load **/ $objReader->setLoadSheetsOnly($sheetnames); /** Load $inputFileName to a PHPExcel Object **/ $objPHPExcel = $objReader->load($inputFileName);
Consulte Examples/Reader/exampleReader08.php para obtener un ejemplo de este cdigo de trabajo.
Para restablecer esta opcin por defecto, puede llamar al mtodo setLoadAllSheets(). $inputFileType = 'Excel5'; $inputFileName = './sampleData/example1.xls'; /** Create a new Reader of the type defined in $inputFileType $objReader = PHPExcel_IOFactory::createReader($inputFileType); /** Advise the Reader to load all Worksheets **/ $objReader->setLoadAllSheets(); /** Load $inputFileName to a PHPExcel Object **/ $objPHPExcel = $objReader->load($inputFileName); **/
Hojas de lectura slo llamado trabajo de un archivo se aplica a los lectores: Excel2007 Excel2003XML Excel5 S S OOCalc no S SYLK Gnumeric S CSV NO
/** Create a new Reader of the type defined in $inputFileType $objReader = PHPExcel_IOFactory::createReader($inputFileType); /** Tell the Reader that we want to use the Read Filter **/ $objReader->setReadFilter($filterSubset); /** Load only the rows and columns that match our filter to PHPExcel **/ $objPHPExcel = $objReader->load($inputFileName);
En este ejemplo no es particularmente til, porque slo puede ser utilizado en circunstancias muy especficas (cuando slo quieres celdas del rango A1:E7 de la hoja de clculo. Un filtro genrico de leer probablemente sera ms til: /** Define a Read Filter class implementing PHPExcel_Reader_IReadFilt er */ class MyReadFilter implements PHPExcel_Reader_IReadFilter { private $_startRow = 0; private $_endRow = 0; private $_columns = array();
/** Get the list of rows and columns to read */ public function __construct($startRow, $endRow, $columns) { $this->_startRow = $startRow; $this->_endRow = $endRow; $this->_columns = $columns; } public function readCell($column, $row, $worksheetName = '') { // Only read the rows and columns that were configured if ($row >= $this->_startRow && $row <= $this->_endRow) { if (in_array($column,$this->_columns)) { return true; } } return false; } } /** Create an Instance of our Read Filter, passing in the cell range **/ $filterSubset = new MyReadFilter(9,15,range('G','K'));
Consulte Examples/Reader/exampleReader10.php para obtener un ejemplo de este cdigo de trabajo.
Esto puede ser particularmente til para conservar la memoria, permitindole leer y procesar un libro grande en "trozos": un ejemplo de este uso puede ser al transferir datos de una hoja de clculo Excel a una base de datos. $inputFileType = 'Excel5'; $inputFileName = './sampleData/example2.xls'; /** Define a Read Filter class implementing PHPExcel_Reader_IReadFilt er */ class chunkReadFilter implements PHPExcel_Reader_IReadFilter { private $_startRow = 0; private $_endRow = 0; /** Set the list of rows that we want to read */ public function setRows($startRow, $chunkSize) { $this->_startRow = $startRow; $this->_endRow = $startRow + $chunkSize; } public function readCell($column, $row, $worksheetName = '') { // Only read the heading row, and the configured rows if (($row == 1) || ($row >= $this->_startRow && $row < $this->_endRow)) { return true; } return false; } } /** Create a new Reader of the type defined in $inputFileType $objReader = PHPExcel_IOFactory::createReader($inputFileType); **/
/** Define how many rows we want to read for each "chunk" $chunkSize = 2048; /** Create a new Instance of our Read Filter **/ $chunkFilter = new chunkReadFilter(); /** Tell the Reader that we want to use the Read Filter $objReader->setReadFilter($chunkFilter);
**/
**/
/** Loop to read our worksheet in "chunk size" blocks **/ for ($startRow = 2; $startRow <= 65536; $startRow += $chunkSize) { /** Tell the Read Filter which rows we want this iteration **/ $chunkFilter->setRows($startRow,$chunkSize); /** Load only the rows that match our filter **/ $objPHPExcel = $objReader->load($inputFileName); // Do some processing here }
El uso de filtros de lectura se aplica a: Excel2007 Excel2003XML Excel5 S S OOCalc no S SYLK Gnumeric S CSV S
/** Extract the first named file from the array list **/ $inputFileName = array_shift($inputFileNames); /** Load the initial file to the first worksheet in a PHPExcel Object **/ $objPHPExcel = $objReader->load($inputFileName); /** Set the worksheet title (to the filename that we've loaded) **/ $objPHPExcel->getActiveSheet() ->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME)); /** Loop through all the remaining files in the list **/ foreach($inputFileNames as $sheet => $inputFileName) { /** Increment the worksheet index pointer for the Reader **/ $objReader->setSheetIndex($sheet+1); /** Load the current file into a new worksheet in PHPExcel **/ $objReader->loadIntoExisting($inputFileName,$objPHPExcel); /** Set the worksheet title (to the filename that we've loaded) **/ $objPHPExcel->getActiveSheet() >setTitle(pathinfo($inputFileName,PATHINFO_BASENAME)); }
Note que usando el mismo ndice de hoja para mltiples lminas no anexar archivos en la misma hoja, pero sobrescribir los resultados de la carga anterior. No se puede cargar varios archivos CSV en la misma hoja de clculo. Combina varios archivos en un nico objeto PHPExcel se aplica a: Excel2007 NO Excel5 NO Excel2003XML NO OOCalc NO SYLK s Gnumeric NO CSV S
4.5. Combinacin de filtros de lectura con elsetSheetIndex() mtodo para dividir un archivo CSV grande a travs de mltiples hojas de trabajo
Archivo .xls an Excel5 BIFF se limita a 65536 filas en una hoja de clculo, mientras que el archivo .xlsx Excel2007 Microsoft Office Open XML SpreadsheetML est limitado a 1.048.576 filas en una hoja de clculo; pero no est limitado de un archivo CSV por espacio disponible en disco. Esto significa que normalmente no sera capaces de leer todas las filas de un archivo CSV muy grande que excede los lmites y guardarlo como un archivo Excel5 o Excel2007. Sin embargo, mediante el uso de filtros de lectura para leer el archivo CSV en "trozos" (utilizando la clase que hemos definido en la seccin chunkReadFilter 5.3 por encima de) y el mtodo setSheetIndex() de la $objReader, podemos compartir el archivo CSV a travs de varias hojas individuales. $inputFileType = 'CSV'; $inputFileName = './sampleData/example2.csv'; echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' usin g IOFactory with a defined reader type of ',$inputFileType,'<br />'; /** Create a new Reader of the type defined in $inputFileType **/ $objReader = PHPExcel_IOFactory::createReader($inputFileType); /** Define how many rows we want to read for each "chunk" $chunkSize = 65530; /** Create a new Instance of our Read Filter **/ $chunkFilter = new chunkReadFilter(); **/
/** Tell the Reader that we want to use the Read Filter **/ /** and that we want to store it in contiguous rows/columns $objReader->setReadFilter($chunkFilter) ->setContiguous(true); /** Instantiate a new PHPExcel object manually $objPHPExcel = new PHPExcel(); **/
**/
/** Set a sheet index **/ $sheet = 0; /** Loop to read our worksheet in "chunk size" blocks **/ /** $startRow is set to 2 initially because we always read the headin gs in row #1 **/ for ($startRow = 2; $startRow <= 1000000; $startRow += $chunkSize) { /** Tell the Read Filter which rows we want to read this loop **/ $chunkFilter->setRows($startRow,$chunkSize); /** Increment the worksheet index pointer for the Reader **/ $objReader->setSheetIndex($sheet); /** Load only the rows that match our filter into a new worksheet **/ $objReader->loadIntoExisting($inputFileName,$objPHPExcel); /** Set the worksheet title for the sheet that we've justloaded) **/ /** and increment the sheet index as well **/ $objPHPExcel->getActiveSheet()>setTitle('Country Data #'.(++$sheet));
Este cdigo se lea 65.530 filas al mismo tiempo desde el archivo CSV que estamos cargando y cada "trozo" en una nueva hoja de clculo. El mtodo setContiguous() para el lector es importante aqu. Es aplicable slo cuando se trabaja con un filtro de leer e identifica las clulas deben ser almacenadas por su posicin dentro del archivo CSV, o su posicin en relacin con el filtro o no. Por ejemplo, si el filtro devuelve true para las clulas en la gama B2:C3, entonces con setContiguous establecida en false (por defecto) estos eran cargados como B2:C3 en el objeto PHPExcel; Pero con setContiguous establecido en true, se cargan como a1. Partiendo de un nico archivo cargado a travs de mltiples hojas de clculo se aplica a: Excel2007 NO Excel5 NO Excel2003XML NO OOCalc NO SYLK NO Gnumeric NO CSV S
**/
Adems el delimitador, tambin puede utilizar los siguientes mtodos para establecer otros atributos para la carga de datos: setEnclosure() valor por defecto es" el valor predeterminado de setLineEnding() es PHP_EOL setInputEncoding() valor por defecto es UTF-8 Ajuste delimitador CSV se aplica a: Excel2007 NO Excel5 NO Excel2003XML NO OOCalc NO SYLK NO Gnumeric NO CSV S
Carga usando un aglomerante de valor se aplica a: Excel2007 NO Excel5 NO Excel2003XML NO OOCalc NO SYLK NO Gnumeric NO CSV S
5. Manejo de errores
Por supuesto, usted siempre debe aplicar algn error de manipulacin a las secuencias de comandos, as. PHPExcel lanza excepciones, as que puedes envolver todo el cdigo que tiene acceso a los mtodos de biblioteca dentro de los bloques Try/Catch para atrapar a cualquier problema que se encuentran y tratar con ellos de manera apropiada. Los lectores PHPExcel lanzar un PHPExcel_Reader_Exception. $inputFileName = './sampleData/example-1.xls'; try { /** Load $inputFileName to a PHPExcel Object **/ $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); } catch(PHPExcel_Reader_Exception $e) { die('Error loading file: '.$e->getMessage()); }
Consulte Examples/Reader/exampleReader16.php para obtener un ejemplo de este cdigo de trabajo.
6. Mtodos auxiliares
Puede recuperar una lista de nombres de hoja de clculo contenido en un archivo sin cargar el archivo entero mediante listWorksheetNames() mtodo del lector; del mismo modo, un mtodo listWorksheetInfo() a recuperar las dimensiones de la hoja de clculo en un archivo sin necesidad de cargar y analizar el archivo entero. El mtodo listWorksheetNames() devuelve un array simple listado el nombre de cada hoja de clculo dentro del libro: $objReader = PHPExcel_IOFactory::createReader($inputFileType); $worksheetNames = $objReader->listWorksheetNames($inputFileName); echo '<h3>Worksheet Names</h3>'; echo '<ol>'; foreach ($worksheetNames as $worksheetName) { echo '<li>', $worksheetName, '</li>'; } echo '</ol>';
Consulte Examples/Reader/exampleReader18.php para obtener un ejemplo de este cdigo de trabajo.
El mtodo listWorksheetInfo() devuelve un array anidado, con cada entrada listado el nombre y las dimensiones de una hoja de clculo: $objReader = PHPExcel_IOFactory::createReader($inputFileType); $worksheetData = $objReader->listWorksheetInfo($inputFileName); echo '<h3>Worksheet Information</h3>'; echo '<ol>'; foreach ($worksheetData as $worksheet) { echo '<li>', $worksheet['worksheetName'], '<br />'; echo 'Rows: ', $worksheet['totalRows'], ' Columns: ', $worksheet['totalColumns'], '<br />'; echo 'Cell Range: A1:', $worksheet['lastColumnLetter'], $worksheet['totalRows']; echo '</li>'; } echo '</ol>';
Consulte Examples/Reader/exampleReader19.php para obtener un ejemplo de este cdigo de trabajo.