Cómo leer y escribir archivos de hoja de cálculo en PHP
Mientras trabajamos en aplicaciones web, a menudo nos encontramos con una situación en la que necesitamos jugar con archivos de hojas de cálculo. Es posible que queramos leer datos de hojas de cálculo y procesarlos. A veces, también es necesario crear y escribir archivos de hojas de cálculo.
En este artículo, estudiamos cómo leer y escribir archivos de hojas de cálculo en PHP. El código que vamos a explicar funcionará en 3 tipos de hoja de cálculo: CSV, XLSX y ODS.
Empezando
Como desarrollador, me gustaría experimentar con diferentes paquetes que pueden ser útiles para resolver problemas del mundo real. Recientemente, encontré un paquete llamado box / spout. Me gustó la forma en que la biblioteca realizaba las tareas. Con esta biblioteca, puede procesar archivos de hojas de cálculo con solo unas pocas líneas de código.
Esta biblioteca es capaz de procesar archivos de cualquier tamaño. Es posible que se trate de un archivo de gran tamaño. Durante el proceso, el archivo grande no debería consumir la memoria y crea un problema de rendimiento. La biblioteca Spout resuelve este problema. Solo necesita 3 MB de memoria para procesar cualquier archivo.
Antes de comenzar, su servidor debe cumplir con los siguientes requisitos.
- PHP versión 7.2 o superior
- Extensión PHP
php_zip
habilitada - Extensión PHP
php_xmlreader
habilitada
El usuario puede comprobar si se cumplen todos los requisitos anteriores en su servidor utilizando el phpinfo()
método. Cree un archivo PHP temporal y coloque la siguiente declaración en él.
Ahora ejecutar este archivo PHP en el navegador y verá configuraciones de PHP como la versión, extensiones, etc. Debe ver xmlreader
y zip
extensiones están habilitadas como se muestra en la siguiente imagen.
Una vez que cumpla con los requisitos, instale el box/spout
paquete a través del siguiente comando.
composer require box/spout
Leer y escribir archivos de hoja de cálculo en PHP
El paquete Spout le permite interactuar con archivos XLSX, CSV y ODS. Como ejemplo, estoy escribiendo un código para archivos XLSX.
Cree un archivo XLSX de muestra users.xlsx
en el directorio raíz y agregue algunas entradas ficticias. En mi caso, el archivo tiene las siguientes entradas.
A continuación, escribiré un código en el reader.php
archivo que leerá users.xlsx
e imprimirá los datos que contiene.
reader.php
<?php
require_once 'vendor/autoload.php';
use BoxSpoutReaderCommonCreatorReaderEntityFactory;
$filePath = getcwd().'/users.xlsx';
$reader = ReaderEntityFactory::createReaderFromFile($filePath);
$reader->open($filePath);
foreach ($reader->getSheetIterator() as $sheet) {
foreach ($sheet->getRowIterator() as $row) {
$cells = $row->getCells();
foreach ($cells as $cell) {
echo $cell->getValue();
}
}
}
$reader->close();
Es así de simple. Adelante, pruébalo.
Por otro lado, podemos crear fácilmente un archivo XLSX y escribir datos en él. Creemos un archivo writer.php
y agreguemos el código a continuación.
escritor.php
<?php
require_once 'vendor/autoload.php';
use BoxSpoutWriterCommonCreatorWriterEntityFactory;
use BoxSpoutCommonEntityRow;
$filePath = getcwd().'/new-users.xlsx';
$writer = WriterEntityFactory::createXLSXWriter();
$writer->openToFile($filePath);
// Here is data for XLSX file
$data = [
['Name', 'Email'],
['Steve', '[email protected]'],
['David', '[email protected]'],
];
foreach ($data as $d) {
$cells = [
WriterEntityFactory::createCell($d[0]),
WriterEntityFactory::createCell($d[1]),
];
$singleRow = WriterEntityFactory::createRow($cells);
$writer->addRow($singleRow);
}
$writer->close();
El código anterior crea un new-users.xlsx
archivo en su directorio raíz. Si abre este archivo, verá que se insertan algunas filas (utilizadas en el código).
En el caso de archivos CSV y ODS, debe crear un $writer
objeto de la siguiente manera.
$filePath = getcwd().'/new-users.ods';
$writer = WriterEntityFactory::createODSWriter();
$filePath = getcwd().'/new-users.csv';
$writer = WriterEntityFactory::createCSVWriter();
Espero que comprenda cómo leer y escribir archivos de hojas de cálculo en PHP. Me gustaría escuchar sus pensamientos y sugerencias en la sección de comentarios a continuación.
Artículos relacionados
- Cómo leer archivos CSV y Excel en PHP usando PhpSpreadsheet
- Cómo exportar datos de bases de datos MySQL a Excel usando PHP
- Cómo convertir HTML a PDF en PHP