Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created February 12, 2019 03:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/cb9debe30555204a03bb812bb37fd0c7 to your computer and use it in GitHub Desktop.
Save parzibyte/cb9debe30555204a03bb812bb37fd0c7 to your computer and use it in GitHub Desktop.
<?php
/**
* Demostrar lectura de hoja de cálculo o archivo
* de Excel con PHPSpreadSheet: leer todo el contenido
* de un archivo de Excel usando índices, no iteradores
*
* @author parzibyte
*/
# Cargar librerias y cosas necesarias
require_once "vendor/autoload.php";
# Indicar que usaremos el IOFactory
use PhpOffice\PhpSpreadsheet\IOFactory;
# Recomiendo poner la ruta absoluta si no está junto al script
# Nota: no necesariamente tiene que tener la extensión XLSX
$rutaArchivo = "LibroParaLeerConPHP.xlsx";
$documento = IOFactory::load($rutaArchivo);
# Recuerda que un documento puede tener múltiples hojas
# obtener conteo e iterar
$totalDeHojas = $documento->getSheetCount();
# Iterar hoja por hoja
for ($indiceHoja = 0; $indiceHoja < $totalDeHojas; $indiceHoja++) {
# Obtener hoja en el índice que vaya del ciclo
$hojaActual = $documento->getSheet($indiceHoja);
echo "<h3>Vamos en la hoja con índice $indiceHoja</h3>";
# Calcular el máximo valor de la fila como entero, es decir, el
# límite de nuestro ciclo
$numeroMayorDeFila = $hojaActual->getHighestRow(); // Numérico
$letraMayorDeColumna = $hojaActual->getHighestColumn(); // Letra
# Convertir la letra al número de columna correspondiente
$numeroMayorDeColumna = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($letraMayorDeColumna);
# Iterar filas con ciclo for e índices
for ($indiceFila = 1; $indiceFila <= $numeroMayorDeFila; $indiceFila++) {
for ($indiceColumna = 1; $indiceColumna <= $numeroMayorDeColumna; $indiceColumna++) {
# Obtener celda por columna y fila
$celda = $hojaActual->getCellByColumnAndRow($indiceColumna, $indiceFila);
# Y ahora que tenemos una celda trabajamos con ella igual que antes
# El valor, así como está en el documento
$valorRaw = $celda->getValue();
# Formateado por ejemplo como dinero o con decimales
$valorFormateado = $celda->getFormattedValue();
# Si es una fórmula y necesitamos su valor, llamamos a:
$valorCalculado = $celda->getCalculatedValue();
# Fila, que comienza en 1, luego 2 y así...
$fila = $celda->getRow();
# Columna, que es la A, B, C y así...
$columna = $celda->getColumn();
echo "En <strong>$columna$fila</strong> tenemos el valor <strong>$valorRaw</strong>. ";
echo "Formateado es: <strong>$valorFormateado</strong>. ";
echo "Calculado es: <strong>$valorCalculado</strong><br><br>";
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment