NOTA: De los 3 sitios en los que he probado este plugin, solo en Indaga.net (aquí) se recarga la página del plugin después de la importación. No obstante, funciona en todos. Puede que sea un conflicto entre plugins; lo veré más adelante…
Valencia, 10/08/2026, G.B.
Hay una necesidad que se repite mucho en sitios WordPress pequeños y medianos: alguien tiene un listado en Excel o en LibreOffice Calc (un directorio de contactos, un catálogo, una lista de recursos) y quiere que aparezca como una tabla navegable en una página web, sin tener que copiar y pegar HTML cada vez que cambian los datos. Para cubrir ese caso he desarrollado Import Excel to Table, un plugin de WordPress que importa archivos .xlsx o .ods a una tabla propia de la base de datos y los muestra mediante shortcode, con ordenación por columna, paginación y enlaces automáticos.
El problema de partida: nada de dependencias externas
La primera versión se apoyaba en PhpSpreadsheet, la librería PHP de referencia para leer hojas de cálculo. Funciona muy bien, pero arrastra una carpeta vendor/ de varios megabytes y miles de archivos pequeños, que hay que generar con Composer e instalar en el servidor. En un hosting compartido con límite de número de archivos —como suele pasar cuando alojas varias webs en el mismo plan— eso puede ser un problema real, y además complica el despliegue si solo tienes acceso por SFTP, sin terminal.
La solución fue reescribir el lector de hojas de cálculo desde cero, apoyándome únicamente en extensiones que ya vienen integradas en PHP: ZipArchive, SimpleXML y DOM. Un archivo .xlsx o .ods no es más que un ZIP con XML dentro, así que se puede leer directamente sin ninguna librería externa. El resultado: cero dependencias, ninguna carpeta que subir aparte del propio plugin, y una copia por SFTP es suficiente para desplegarlo.
Qué hace
- Importa
.xlsxy.odsdesde el panel de administración, usando la primera fila del archivo como encabezados de columna. - Admite varias importaciones independientes, cada una con su propio identificador. Un directorio de contactos, un catálogo de productos y una lista de recursos pueden convivir en el mismo sitio sin pisarse: reimportar uno de ellos no afecta a los demás.
- Sustituye los datos de forma transaccional: si la importación falla a mitad de proceso, no se pierden ni los datos antiguos ni se queda la tabla a medias.
- Muestra cada importación con su propio shortcode, indicando su identificador:
Debes iniciar sesión para ver estos datos.
,Debes iniciar sesión para ver estos datos.
, etc. Pueden convivir varios en la misma página, cada uno con su propio control de orden y paginación, sin interferir entre sí. Con estas funciones:- Ordenación por columna (ascendente/descendente).
- Paginación (25 registros por página por defecto, configurable).
- Enlaces automáticos: si una celda contiene un correo o una URL —ya sea porque LibreOffice/Excel la convirtió en hipervínculo al escribirla, o simplemente porque el texto tiene forma de email o dirección web—, se muestra como un enlace clicable.
- Fechas y horas con formato español (
DD/MM/AAAA,HH:MM), en lugar del formato ISO interno que usan estos archivos por dentro.
- Panel de administración con listado de importaciones: identificador, número de registros, fecha de la última importación, el shortcode ya escrito para copiar, vista previa de los datos y borrado individual (o de todas a la vez).
- Control de acceso opcional: si los datos son sensibles, se puede restringir la visualización a usuarios con sesión iniciada.
Seguridad
Al ser un plugin que acepta subida de archivos y muestra datos en el frontend, se ha cuidado especialmente:
- Solo usuarios con capacidad
manage_optionspueden importar o borrar datos, con verificación de nonce (CSRF) en cada acción. - El archivo subido se valida por extensión y por tipo MIME real (no basta con renombrar un archivo a
.xlsx), con un límite de tamaño de 5 MB. - Todo el HTML de salida se escapa correctamente, y tanto los parámetros de ordenación como el identificador de cada importación se validan contra listas seguras antes de usarse en ninguna consulta.
- Cada registro guardado lleva un hash de integridad que se comprueba al leerlo, como salvaguarda frente a manipulaciones directas de la base de datos.
Compatibilidad
- WordPress: declarado a partir de la versión 5.0, aunque en la práctica solo usa funciones muy estables de la API (
$wpdb,dbDelta(),wp_nonce_field(),add_shortcode()…) disponibles desde mucho antes. Funciona igual con el editor de bloques o con Classic Editor, ya que no depende de Gutenberg. - PHP: declarado a partir de 7.4, pero el código en sí no usa ninguna sintaxis exclusiva de PHP 8.x (nada de
match(), propiedadesreadonly, operador nullsafe…), así que en la práctica sería compatible desde PHP 7.0. Probado sin avisos de deprecación hasta PHP 8.3. - Extensiones PHP necesarias:
zip,SimpleXML,DOMyfileinfo— las cuatro vienen activadas por defecto en la gran mayoría de hostings. Si alguna faltara, el plugin lo detecta y avisa en el panel de administración en vez de fallar en silencio. - Actualización sin fricción: si ya tenías datos importados con una versión anterior del plugin (de cuando solo existía una tabla), al actualizar por SFTP se conservan automáticamente bajo el identificador
default, y el shortcodesin atributo sigue funcionando exactamente igual que antes.Debes iniciar sesión para ver estos datos.
Plugins similares en el repositorio
Antes de escribir el plugin conviene mirar qué hay ya disponible. En el ecosistema de WordPress existen varias alternativas con un planteamiento parecido, aunque ninguna comparte exactamente el mismo enfoque:
- wpDataTables — el más completo y establecido del mercado. Importa
.xls,.odsy.xlsxy genera tablas totalmente personalizables, con filtros avanzados, gráficos y edición tipo Excel en el frontend. Es mucho más potente que Import Excel to Table, pero también mucho más pesado: es de pago (el plan gratuito es limitado) y no está pensado para minimizar dependencias. - WP Convert Excel Data To Table And DB — es el que más se parece en planteamiento: importa el Excel a la base de datos de WordPress, gestiona los registros desde un menú propio y permite editarlos manualmente. No es posible comprobar cómo está construido por dentro, pero conceptualmente es el competidor más cercano.
- Excel Tables (de WP Missing) — más sencillo: se sube el archivo a la biblioteca de medios, se convierte automáticamente en tabla y se inserta con shortcode. Gratuito y minimalista, pero sin ordenación ni paginación configurables.
- WP Table Manager — apuesta por sincronizar la tabla de forma continua con el archivo Excel de origen, en vez de hacer una importación puntual.
Ninguno de ellos presume de estar construido sin dependencias externas: lo habitual es que usen PhpSpreadsheet u otra librería similar por debajo. Esa es la principal diferencia de Import Excel to Table frente a las alternativas: mismo resultado funcional que herramientas mucho más grandes, pero sin carpeta vendor/ que instalar, pensado explícitamente para hostings con límite de archivos y despliegue solo por SFTP.
Limitaciones a tener en cuenta
Por ser un lector escrito a mano en lugar de una librería completa, hay algunos casos que no cubre: solo lee la primera hoja del libro, no evalúa fórmulas (toma el último valor calculado guardado en el archivo), y no procesa celdas combinadas ni archivos .xls del formato binario antiguo (hay que convertirlos antes a .xlsx). Para el caso de uso habitual —una o varias tablas de datos simples que se actualizan de vez en cuando— no supone ningún problema.
NOTA: Import Excel to Table nació como una prueba en este mismo sitio, indaga.net, antes de valorar su uso en otros proyectos con necesidades de datos tabulares más específicas.
Descargar archivo .zip que he subido y compartido en mi cuenta de pCloud. Aunque pCloud es seguro, comprueba siempre que los archivos que descargues estén limpios de virus: import-excel-to-table.zip
