Cómo convertir un archivo de Excel a Base64
- Suelta un archivo
.xlsx,.xlso.csven el recuadro, o elígelo con el selector de archivos. - Salida como empieza en Base64 simple. Elige JSON para incluir el nombre del archivo, el tipo MIME y el tamaño.
- Copiar salida, o Guardar como .txt para libros grandes.
¿Qué hoja de cálculo es?
| Archivo | El Base64 empieza por | Tipo MIME |
|---|---|---|
.xlsx, .xlsm | UEsDB (ZIP) | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
.xls | 0M8R4KGxGuE (OLE2) | application/vnd.ms-excel |
.xlsx protegido con contraseña | 0M8R4KGxGuE | el mismo que .xlsx |
.csv, UTF-8 con BOM | 77u/ | text/csv |
.csv, sin BOM | el propio texto, p. ej. bmFtZSxxdHkK para name,qty y un salto de línea | text/csv |
Las salidas data URI y JSON usan el tipo que informa tu navegador. En equipos Windows con Excel instalado, el sistema suele etiquetar los .csv como application/vnd.ms-excel. Si una API es estricta con el CSV, cambia el tipo a text/csv a mano.
Un CSV no es más que texto
Un archivo CSV es texto plano, así que su Base64 se decodifica en filas legibles. Eso tiene algunas consecuencias:
- La codificación de caracteres viaja con los bytes. Un CSV que Excel guardó en una página de códigos heredada, como Windows-1252, se decodifica con caracteres erróneos si el receptor asume UTF-8. Al guardar, mejor elige “CSV UTF-8”.
- Un CSV grande se reduce mucho con gzip o ZIP, y merece la pena comprimirlo antes de codificar si la API acepta subidas comprimidas. Un
.xlsxya es un ZIP, así que volver a comprimirlo apenas ahorra nada. - Para echar un vistazo rápido a un CSV que te llegó en Base64, Base64 a CSV lo decodifica y lo muestra como texto.
Dónde viajan las hojas de cálculo como Base64
- API de informes e importación que aceptan un libro dentro de un cuerpo JSON, por ejemplo para importar productos o precios en bloque.
- Plataformas de automatización que pasan archivos entre pasos como cadenas Base64, por ejemplo al leer un adjunto de correo y subirlo a un almacenamiento.
- API de envío de correo, donde un adjunto de hoja de cálculo va en un campo JSON como Base64.
- Enlaces de descarga en HTML generado, con la salida HTML
<a download>, para que una página de informe lleve su propio.xlsx.
Codificar y comprobar el formato en Python
import base64
from pathlib import Path
SIGNATURES = {
"UEsDB": "xlsx (ZIP)",
"0M8R4KGxGuE": "xls (OLE2) or encrypted xlsx",
"77u/": "text with a UTF-8 BOM, e.g. CSV UTF-8",
}
def encode_sheet(path):
b64 = base64.b64encode(Path(path).read_bytes()).decode("ascii")
kind = next((v for k, v in SIGNATURES.items() if b64.startswith(k)), "other")
return b64, kind
Una comprobación así detecta un error de subida habitual: una “hoja de cálculo” que en realidad es una página de error HTML o un .xls antiguo renombrado a .xlsx. Más sobre archivos en Base64 en Python, y Base64 a Excel previsualiza un libro en Base64 y lo guarda como archivo.
Preguntas frecuentes
¿Cuál es el tipo MIME de un archivo XLSX?
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet. El formato antiguo .xls usa application/vnd.ms-excel, y CSV es text/csv.
¿Por qué el Base64 de mi CSV empieza por 77u/?
77u/ es la marca de orden de bytes (BOM) de UTF-8 (EF BB BF). Excel la añade cuando guardas como “CSV UTF-8”. La mayoría de los parsers la manejan, pero algunos la toman como parte del nombre de la primera columna, así que quítala si una cabecera como name deja de coincidir.
¿Puedo enviar un archivo de Excel en una petición JSON?
Sí. Codifícalo como Base64 simple y ponlo en el campo de contenido de archivo que indique tu API, junto con el nombre y el tipo MIME. La salida JSON muestra la estructura: name, type, size y data.