Error Excel: Carácter xml no válido. Línea 2, columna XXXX

Hace poco me encontré un error ultra extraño a la hora de exportar datos a un archivo XLSX desde la base de datos. Estos datos se muestran en un sistema de gestión de datos y éste utiliza una librería de Excel que lo único que hace es por cada registro de un array guardarlo en una respectiva celda. Nada raro.

Hasta ahora todo funciona correctamente y no es un error de la librería ni mucho menos. El excel ha detectado que hay un carácter extraño entre todos los registros y directamente devuelve un error. Si lo descargo directamente de la base de datos con PHPMYADMIN no se ve ningún dato raro.

Cuando quise abrir el excel el error que me da es el siguiente:

Se han detectado errores en el archivo “C:\Users\XX\Desktop\Archivo.xlsx”

Excel ha completado la validación y reparación en nivel de archivo. Puede que se hayan reparado o descartado algunas partes de este libro.

Parte quitada: /xl/sharedStrings.xml parte con error de XML. (Cadenas) Carácter xml no válido. Línea 2, columna 8471.

Registros quitados: Información de celda de /xl/worksheets/sheet1.xml parte

Al leer esto me sonaba todo a chino y directamente busqué en google y en principio no encontré nada que me sirviera para reparar el problema ya que lo que quería era saber que registro es el que me estaba dando error.

Hasta que encontré una solución:

Hay algo que pocos saben (incluyendome a mi hasta ahora) y es que el formato XLSX es un archivo comprimido. Sabiendo esto ya sabes lo que viene 😉

Hacemos una copia del archivo dañado. Modificamos el archivo copiado y cambiamos la extensión a .zip y lo descomprimimos.

Lo que habíamos leído antes en el error ahora tiene sentido ya que podemos encontrar entre los archivos descomprimidos una carpeta llamada “xl” en el que se encuentra un archivo llamado “sharedStrings.xml”.

Abrimos este archivo xml con el NotePad++ y utilizando las herramientas de búsqueda de línea (CTRL+G), elegimos la opción “Desplazamiento” y nos vamos a la línea donde nos ha dado el error, que en mi caso era la 8471.

Desplazamiento NotePad++

Cuando hagamos clic en “Ir” puede que no veas el cursor, lo mejor es moverte con las flechas de izquierda / derecha del teclado para ver donde está y desplazarnos de igual manera hasta encontrar algún carácter extraño. Suele estar marcado de alguna manera como en mi caso, aparecía un “null” en negrita lo que me dió la pista para entrar a la base de datos, revisar el dato y descubrir que había un salto de línea en ese registro.

Registro SharedStrings.xml

Como veréis no es un problema de programación, pero como desarrollador nos encontramos a veces con este tipo de situaciones en el que necesitamos ser resolutivos y muchas veces no encontramos por donde empezar. Espero le sirva a alguien ;).