Convertir datos sin procesar JSON en informes XLSX pulidos es una necesidad frecuente para los desarrolladores de Python que trabajan en paneles de análisis. Aspose.BarCode Cloud SDK for Python proporciona una biblioteca potente que simplifica la generación de códigos de barras y la gestión de archivos en la nube. En esta guía aprenderá la conversión de JSON a XLSX en Python, desde la configuración del SDK hasta la generación de imágenes de códigos de barras y la exportación de la hoja de cálculo final. Al final tendrá un script reutilizable listo para cargas de trabajo de producción.
Antes de comenzar: requisitos e instalación
Para seguir este tutorial necesitas:
- Python 3.7 o una versión más reciente instalado en su máquina.
- Un IDE o editor de texto de su elección (VS Code, PyCharm, etc.).
- Una cuenta de Aspose Cloud con Client Id y Client Secret.
- Acceso a Internet para las llamadas a la API en la nube.
Instale los paquetes requeridos con pip:
pip install aspose-barcode-cloud openpyxl
Descargue el SDK desde la página oficial de lanzamientos si prefiere una instalación manual: Download Aspose.BarCode Cloud SDK for Python.
Configure sus credenciales antes de realizar cualquier llamada a la API:
from asposebarcodecloud import Configuration
CLIENT_ID = "YOUR_CLIENT_ID"
CLIENT_SECRET = "YOUR_CLIENT_SECRET"
config = Configuration()
config.host = "https://api.aspose.cloud"
config.api_key["client_id"] = CLIENT_ID
config.api_key["client_secret"] = CLIENT_SECRET
Con el entorno listo, podemos pasar a la implementación.
Construyéndolo paso a paso: conversión de JSON a XLSX en Python
Paso 1: Cargar el archivo JSON de origen
Lea la matriz JSON que contiene los datos que desea exportar.
import json
INPUT_JSON_PATH = "input.json"
with open(INPUT_JSON_PATH, "r", encoding="utf-8") as f:
json_data = json.load(f) # expects a list of dictionaries
Paso 2: Preparar el libro de trabajo y la fila de encabezado
Cree un libro de trabajo de Excel con OpenPyXL y escriba los encabezados de columna.
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
wb = Workbook()
ws = wb.active
ws.title = "Data"
columns = list(json_data[0].keys())
columns.append("BarcodeImage") # extra column for the barcode
for col_idx, col_name in enumerate(columns, start=1):
ws.cell(row=1, column=col_idx, value=col_name)
Paso 3: Generar imágenes de código de barras
Utilice Aspose.BarCode Cloud para crear un código de barras PNG para cada registro.
La referencia de la API para BarcodeApi.generate_barcode está disponible en la referencia de la API.
from asposebarcodecloud import BarcodeApi, GenerateBarcodeRequest, EncodeBarcodeType, ApiClient
from asposebarcodecloud.rest import ApiException
barcode_api = BarcodeApi(ApiClient(config))
def generate_barcode_image(text: str,
barcode_type: EncodeBarcodeType = EncodeBarcodeType.CODE_128) -> bytes:
request = GenerateBarcodeRequest(text=text, type=barcode_type, format="png")
try:
response = barcode_api.generate_barcode(request)
return response.read()
except ApiException as e:
print(f"Error generating barcode for '{text}': {e}")
raise
Paso 4: Insertar códigos de barras en la hoja de cálculo
Almacena en caché los códigos de barras idénticos para evitar llamadas API redundantes, y luego incrusta la imagen.
import io
from openpyxl.drawing.image import Image as XLImage
barcode_cache = {}
for row_idx, record in enumerate(json_data, start=2):
# write regular fields
for col_idx, field_name in enumerate(columns[:-1], start=1):
ws.cell(row=row_idx, column=col_idx, value=record.get(field_name, ""))
# barcode generation / caching
barcode_source = str(record.get("code", f"row{row_idx}"))
img_bytes = barcode_cache.get(barcode_source) or generate_barcode_image(barcode_source)
barcode_cache[barcode_source] = img_bytes
img_stream = io.BytesIO(img_bytes)
img = XLImage(img_stream)
img.width, img.height = 150, 50 # optional size adjustment
img_cell = f"{get_column_letter(len(columns))}{row_idx}"
ws.add_image(img, img_cell)
Paso 5: Ajustar automáticamente el ancho de columnas y guardar el libro de trabajo
Finalice el archivo y escríbalo en el disco.
for col_idx in range(1, len(columns) + 1):
column_letter = get_column_letter(col_idx)
ws.column_dimensions[column_letter].width = 20
OUTPUT_XLSX_PATH = "output.xlsx"
wb.save(OUTPUT_XLSX_PATH)
print(f"Conversion complete. XLSX saved to '{OUTPUT_XLSX_PATH}'.")
Con estos pasos la conversión de JSON a XLSX está completa, y cada fila ahora contiene una imagen de código de barras generada por Aspose.BarCode.
Script completo de JSON a XLSX en Python - Ejemplo de código completo
El siguiente ejemplo muestra la implementación de extremo a extremo de la conversión de JSON a XLSX usando Aspose.BarCode Cloud SDK for Python.
import json
import os
import io
from typing import Dict, Any, List
import asposebarcodecloud
from asposebarcodecloud import (
BarcodeApi,
GenerateBarcodeRequest,
EncodeBarcodeType,
Configuration,
ApiClient,
)
from asposebarcodecloud.rest import ApiException
from openpyxl import Workbook
from openpyxl.drawing.image import Image as XLImage
from openpyxl.utils import get_column_letter
# -------------------- Aspose.BarCode Cloud Setup --------------------
# Replace these placeholders with your actual Aspose Cloud credentials.
CLIENT_ID = "YOUR_CLIENT_ID"
CLIENT_SECRET = "YOUR_CLIENT_SECRET"
config = Configuration()
config.host = "https://api.aspose.cloud"
config.api_key["client_id"] = CLIENT_ID
config.api_key["client_secret"] = CLIENT_SECRET
barcode_api = BarcodeApi(ApiClient(config))
def generate_barcode_image(text: str, barcode_type: EncodeBarcodeType = EncodeBarcodeType.CODE_128) -> bytes:
"""
Calls Aspose.BarCode Cloud to generate a barcode image for the given text.
Returns raw PNG bytes.
"""
request = GenerateBarcodeRequest(
text=text,
type=barcode_type,
format="png"
)
try:
response = barcode_api.generate_barcode(request)
# response is a file-like object; read its content.
return response.read()
except ApiException as e:
print(f"Error generating barcode for '{text}': {e}")
raise
# -------------------- JSON to XLSX Conversion --------------------
INPUT_JSON_PATH = "input.json"
OUTPUT_XLSX_PATH = "output.xlsx"
# Load JSON data (expects a list of dictionaries)
with open(INPUT_JSON_PATH, "r", encoding="utf-8") as f:
json_data: List[Dict[str, Any]] = json.load(f)
if not isinstance(json_data, list):
raise ValueError("JSON root must be an array of objects.")
# Prepare workbook
wb = Workbook()
ws = wb.active
ws.title = "Data"
# Determine column order from first record
columns = list(json_data[0].keys())
# Append a column for the barcode image
barcode_column_name = "BarcodeImage"
columns.append(barcode_column_name)
# Write header row
for col_idx, col_name in enumerate(columns, start=1):
ws.cell(row=1, column=col_idx, value=col_name)
# Cache to avoid regenerating identical barcodes
barcode_cache: Dict[str, bytes] = {}
# Process each JSON record
for row_idx, record in enumerate(json_data, start=2):
# Write regular fields
for col_idx, field_name in enumerate(columns[:-1], start=1):
value = record.get(field_name, "")
ws.cell(row=row_idx, column=col_idx, value=value)
# Generate or retrieve barcode image for a specific field (e.g., "code")
barcode_source = str(record.get("code", f"row{row_idx}"))
if barcode_source in barcode_cache:
img_bytes = barcode_cache[barcode_source]
else:
img_bytes = generate_barcode_image(barcode_source)
barcode_cache[barcode_source] = img_bytes
# Insert barcode image into the last column of the current row
img_stream = io.BytesIO(img_bytes)
img = XLImage(img_stream)
# Adjust image size (optional)
img.width, img.height = 150, 50
img_cell = f"{get_column_letter(len(columns))}{row_idx}"
ws.add_image(img, img_cell)
# Auto‑size columns (basic heuristic)
for col_idx, _ in enumerate(columns, start=1):
column_letter = get_column_letter(col_idx)
ws.column_dimensions[column_letter].width = 20
# Save workbook
wb.save(OUTPUT_XLSX_PATH)
print(f"Conversion complete. XLSX saved to '{OUTPUT_XLSX_PATH}'.")
Nota: Este ejemplo de código demuestra la funcionalidad principal. Antes de usarlo en su proyecto, asegúrese de actualizar las rutas de los archivos (
input.json,output.xlsx, etc.) para que coincidan con sus ubicaciones reales, verifique que todas las dependencias requeridas estén correctamente instaladas y pruebe exhaustivamente en su entorno de desarrollo. Si encuentra algún problema, consulte la documentación oficial o póngase en contacto con el equipo de soporte para obtener ayuda.
Ejecutando la misma tarea con cURL y la API REST
Si prefieres un enfoque puramente REST, puedes lograr el mismo resultado con algunos comandos cURL. El flujo de trabajo refleja la implementación en Python: obtener un token de acceso, cargar el archivo JSON, generar códigos de barras, crear el archivo XLSX y descargar el resultado.
1. Autenticar y obtener un token de acceso
curl -X POST "https://api.aspose.cloud/connect/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET"
La respuesta contiene access_token, que usarás en llamadas posteriores.
2. Cargar el archivo JSON de origen a Aspose Cloud Storage
curl -X PUT "https://api.aspose.cloud/v3.0/storage/file/input.json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
--data-binary @input.json
3. Generar una imagen de código de barras para un valor de muestra
curl -X POST "https://api.aspose.cloud/v3.0/barcode/generate" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"text": "SampleCode123",
"type": "Code128",
"format": "png"
}' \
-o barcode.png
4. Convertir JSON a XLSX usando Aspose.Cells Cloud
curl -X POST "https://api.aspose.cloud/v3.0/cells/convert?format=xlsx" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"FileName":"input.json"}' \
-o output.xlsx
5. Descargar el archivo XLSX resultante
curl -X GET "https://api.aspose.cloud/v3.0/storage/file/output.xlsx" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-o output.xlsx
Estos comandos ilustran cómo se puede realizar la misma conversión de JSON a XLSX sin escribir ningún código. Para obtener más detalles, consulte la documentación oficial de la API.
Configuración de opciones de conversión para obtener resultados óptimos
Aspose.BarCode Cloud ofrece varios parámetros que puedes ajustar para adaptarlos a tu proyecto:
- Tipo de código de barras - Elija entre
EncodeBarcodeType.CODE_128,EncodeBarcodeType.QR,EncodeBarcodeType.PDF_417, etc. - Formato de imagen - PNG es el predeterminado, pero puede solicitar
jpegogifcambiando el campoformat. - Tamaño de la imagen - Ajuste
img.widthyimg.heighten el script para controlar la resolución. - Ancho de columna - Modifique
ws.column_dimensions[column_letter].widthpara que se ajuste a texto más largo.
Ejemplo de cambio del tipo de código de barras y formato de imagen:
def generate_barcode_image(text: str,
barcode_type: EncodeBarcodeType = EncodeBarcodeType.QR,
image_format: str = "jpeg") -> bytes:
request = GenerateBarcodeRequest(
text=text,
type=barcode_type,
format=image_format
)
response = barcode_api.generate_barcode(request)
return response.read()
Optimización del rendimiento para grandes conjuntos de datos JSON
Al manejar miles de registros, considere estas optimizaciones:
- Transmitir JSON en lugar de cargar todo el archivo - Use
ijsonpara iterar sobre los registros sin mantener toda la lista en memoria. - Cachear códigos de barras repetidos - El diccionario
barcode_cacheen el código de ejemplo evita llamadas API duplicadas para valores idénticos. - Redimensionar imágenes de forma inteligente - Imágenes de códigos de barras más pequeñas reducen el uso de memoria y aceleran el guardado del libro de trabajo.
- Escribir filas por lotes - OpenPyXL permite escribir filas en bloque; agrupar escrituras puede reducir la sobrecarga.
Aplicar estos consejos mantendrá la conversión rápida y eficiente en memoria, incluso para conjuntos de datos masivos.
Conclusión
La conversión de JSON a XLSX en Python se vuelve sencilla cuando aprovechas el poder de Aspose.BarCode Cloud SDK for Python. Esta guía te lleva a través de la configuración del entorno, la generación de códigos de barras, la creación de libros de trabajo y la optimización del rendimiento, proporcionándote una base sólida para construir pipelines de informes. Recuerda que se requiere una licencia comercial para implementaciones en producción; puedes explorar las opciones de precios en la página del producto o obtener una licencia temporal desde la página de licencia temporal. Con el código proporcionado y las recomendaciones de mejores prácticas, estás listo para integrar una funcionalidad fiable de exportación de datos en tus aplicaciones.
Preguntas frecuentes
-
¿Cómo puedo implementar la conversión de JSON a XLSX en Python sin escribir mi propia lógica de códigos de barras?
Utilice el SDK de Aspose.BarCode Cloud para generar códigos de barras automáticamente y combínelo con OpenPyXL para la creación de Excel, como se muestra en el ejemplo de código completo. -
¿Cuál es la forma recomendada de manejar campos faltantes en la entrada JSON?
Acceda a los valores del diccionario conrecord.get("field_name", "")para proporcionar una cadena vacía predeterminada, evitando errores en tiempo de ejecución durante la población de la hoja de cálculo. -
¿Existen límites en el tamaño del archivo JSON que puedo procesar?
La API en la nube en sí no tiene un límite estricto, pero para archivos muy grandes debe transmitir el JSON y almacenar en caché los códigos de barras, como se describe en la sección de rendimiento. -
¿Necesito una licencia separada para Aspose.Cells al crear el archivo XLSX?
No. La generación del XLSX se realiza localmente con OpenPyXL, por lo que solo el Aspose.BarCode Cloud SDK requiere una licencia para las llamadas a la nube.