Importar Excel en MySQL usando Phpspreadsheet en CodeIgniter
PhpSpreadsheet es una biblioteca escrita en PHP puro y ofrece un conjunto de clases que le permiten leer y escribir varios formatos de archivo de hoja de cálculo como Excel y LibreOffice Calc
Instalación
Use Composer para instalar PhpSpreadsheet en su proyecto:
composer require phpoffice/phpspreadsheet
Si está construyendo su instalación en una máquina de desarrollo que está en una versión de PHP diferente al servidor donde se implementará, o si su versión de la CLI de PHP no es la misma que su tiempo de ejecución, como php-fpm
Apache mod_php
, entonces es posible que desee para agregar lo siguiente a su composer.json
antes de instalar:
{
"require": {
"phpoffice/phpspreadsheet": "^1.23"
},
"config": {
"platform": {
"php": "7.3"
}
}
}
y luego corre
composer install
para garantizar que se recuperen las dependencias correctas para que coincidan con su entorno de implementación.
Ahora que ya tenemos en nuestro proyecto Phpspreadsheet, vamos a realizar una serie de pasos para poder subir un archivo Excel.
1.- Vamos a crear un formulario y un archivo de ejemplo para este ejercicio.
<form method="post" action="<?= base_url ?>spreadsheet_import" enctype="multipart/form-data">
<div class="form-group">
<input type="file" name="upload_file" class="form-control" placeholder="Ingresa un excel" id="upload_file">
</div>
<div class="form-group">
<input type="submit" name="submit" class="btn btn-primary">
</div>
</form>
Ahora la estructura de nuestro Excel será la siguiente.
2.- Controlador
En su controlador, obtenga el archivo y verifique la extensión.
pathinfo - get the file extension (PATHINFO_EXTENSION)
;
Nuestro metodo debe quedar de la siguiente manera:
public function spreadsheet_import(){
$upload_file = $_FILES['upload_file']['name'];
$extension = pathinfo($upload_file,PATHINFO_EXTENSION);
if($extension == 'csv'){
$reader= new \PhpOffice\PhpSpreadsheet\Reader\Csv();
}else if($extension == 'xls'){
$reader= new \PhpOffice\PhpSpreadsheet\Reader\Xls();
}else {
$reader= new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
}
$spreadsheet = $reader->load($_FILES['upload_file']['tmp_name']);
$sheetdata = $spreadsheet->getActiveSheet()->toArray();
$seetcount = count($sheetdata);
if($seetcount > 1){
for ($i=1; $i < $seetcount; $i++) {
$nombre = $sheetdata[$i][0];
$edad = $sheetdata[$i][1];
$pais = $sheetdata[$i][2];
$param['nombre'] = $nombre;
$param['edad'] = $edad;
$param['pais'] = $pais;
$this->Mregistro->registro($param);
}
redirect(base_url(), 'refresh');
}
}
De esta manera implementamos Phpspreadsheet en CodeIgniter para realizar la carga de dichos documentos.