La conversione di dati grezzi JSON in report XLSX rifiniti è una necessità frequente per gli sviluppatori Python che lavorano su dashboard analitiche. Aspose.BarCode Cloud SDK for Python fornisce una libreria potente che semplifica la generazione di codici a barre e la gestione dei file nel cloud. In questa guida imparerai la conversione da JSON a XLSX in Python, dalla configurazione dell’SDK alla generazione di immagini di codici a barre e all’esportazione del foglio di calcolo finale. Alla fine avrai uno script riutilizzabile pronto per carichi di lavoro di produzione.
Prima di Iniziare: Prerequisiti e Installazione
Per seguire questo tutorial è necessario:
- Python 3.7 o versioni successive installati sulla tua macchina.
- Un IDE o un editor di testo a tua scelta (VS Code, PyCharm, ecc.).
- Un account Aspose Cloud con Client Id e Client Secret.
- Accesso a Internet per le chiamate API cloud.
Installa i pacchetti richiesti con pip:
pip install aspose-barcode-cloud openpyxl
Scarica l’SDK dalla pagina di rilascio ufficiale se preferisci un’installazione manuale: Download Aspose.BarCode Cloud SDK for Python.
Configura le tue credenziali prima di effettuare chiamate 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 l’ambiente pronto, possiamo passare all’implementazione.
Costruire passo dopo passo: conversione da JSON a XLSX in Python
Passo 1: Carica il file JSON di origine
Leggi l’array JSON che contiene i dati che desideri esportare.
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
Passo 2: Preparare la cartella di lavoro e la riga di intestazione
Crea una cartella di lavoro Excel con OpenPyXL e scrivi le intestazioni delle colonne.
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)
Passo 3: Genera immagini di codice a barre
Utilizza Aspose.BarCode Cloud per creare un codice a barre PNG per ogni record.
Il riferimento API per BarcodeApi.generate_barcode è disponibile nella riferimento 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
Passo 4: Inserire i codici a barre nel foglio di lavoro
Memorizza nella cache i codici a barre identici per evitare chiamate API ridondanti, quindi incorpora l’immagine.
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)
Passo 5: Ridimensiona automaticamente le colonne e salva la cartella di lavoro
Finalizza il file e scrivilo su 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 questi passaggi la conversione da JSON a XLSX è completa e ogni riga ora contiene un’immagine di codice a barre generata da Aspose.BarCode.
Script completo JSON in XLSX in Python - Esempio di codice completo
Il seguente esempio dimostra l’implementazione end‑to‑end della conversione da JSON a XLSX utilizzando 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: Questo esempio di codice dimostra la funzionalità principale. Prima di usarlo nel tuo progetto, assicurati di aggiornare i percorsi dei file (
input.json,output.xlsx, ecc.) per corrispondere alle tue effettive posizioni dei file, verifica che tutte le dipendenze richieste siano correttamente installate e testa accuratamente nell’ambiente di sviluppo. Se riscontri problemi, consulta la documentazione ufficiale o contatta il team di supporto per assistenza.
Eseguire la stessa attività con cURL e l’API REST
Se preferisci un approccio REST puro, puoi ottenere lo stesso risultato con alcuni comandi cURL. Il flusso di lavoro rispecchia l’implementazione Python: ottieni un token di accesso, carica il file JSON, genera i codici a barre, crea il file XLSX e scarica il risultato.
1. Autenticazione e ottenimento di un token di accesso
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 risposta contiene access_token che dovrai utilizzare nelle chiamate successive.
2. Carica il file JSON di origine su 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. Genera un’immagine di codice a barre per un valore di esempio
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. Converti JSON in 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. Scarica il file XLSX risultante
curl -X GET "https://api.aspose.cloud/v3.0/storage/file/output.xlsx" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-o output.xlsx
Questi comandi illustrano come la stessa conversione da JSON a XLSX può essere eseguita senza scrivere alcun codice. Per ulteriori dettagli, consulta la documentazione ufficiale dell’API.
Configurazione delle opzioni di conversione per risultati ottimali
Aspose.BarCode Cloud offre diversi parametri che puoi modificare per adattarli al tuo progetto:
- Tipo di Codice a Barre - Scegli tra
EncodeBarcodeType.CODE_128,EncodeBarcodeType.QR,EncodeBarcodeType.PDF_417, ecc. - Formato Immagine - PNG è predefinito, ma puoi richiedere
jpegogifmodificando il campoformat. - Dimensione Immagine - Regola
img.widtheimg.heightnello script per controllare la risoluzione. - Larghezza Colonna - Modifica
ws.column_dimensions[column_letter].widthper adattare testi più lunghi.
Esempio di modifica del tipo di codice a barre e del formato immagine:
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()
Ottimizzazione delle prestazioni per grandi set di dati JSON
Quando si gestiscono migliaia di record, considerare queste ottimizzazioni:
- Esegui lo streaming del JSON invece di caricare l’intero file - Usa
ijsonper iterare sui record senza mantenere l’intera lista in memoria. - Cache dei codici a barre ripetuti - Il dizionario
barcode_cachenel codice di esempio impedisce chiamate API duplicate per valori identici. - Ridimensiona le immagini in modo saggio - Immagini di codici a barre più piccole riducono l’uso della memoria e accelerano il salvataggio della cartella di lavoro.
- Scrittura batch delle righe - OpenPyXL consente di scrivere righe in blocco; raggruppare le scritture può ridurre l’overhead.
Applicare questi suggerimenti manterrà la conversione veloce ed efficiente in termini di memoria anche per set di dati massivi.
Conclusione
La conversione da JSON a XLSX in Python diventa semplice quando sfrutti la potenza di Aspose.BarCode Cloud SDK for Python. Questa guida ti ha accompagnato nella configurazione dell’ambiente, nella generazione di codici a barre, nella creazione di cartelle di lavoro e nell’ottimizzazione delle prestazioni, fornendoti una solida base per costruire pipeline di reporting. Ricorda che è necessaria una licenza commerciale per le distribuzioni in produzione; puoi esplorare le opzioni di prezzo nella pagina del prodotto o ottenere una licenza temporanea dalla pagina della licenza temporanea. Con il codice fornito e le raccomandazioni delle migliori pratiche, sei pronto a integrare una funzionalità affidabile di esportazione dei dati nelle tue applicazioni.
FAQs
-
Come posso implementare la conversione da JSON a XLSX in Python senza scrivere la mia logica di codici a barre?
Utilizza l’Aspose.BarCode Cloud SDK per generare i codici a barre automaticamente e combinalo con OpenPyXL per la creazione di Excel, come mostrato nell’esempio di codice completo. -
Qual è il modo consigliato per gestire i campi mancanti nell’input JSON?
Accedi ai valori del dizionario conrecord.get("field_name", "")per fornire una stringa vuota predefinita, evitando errori di runtime durante il popolamento del foglio di lavoro. -
Ci sono limiti alla dimensione del file JSON che posso elaborare?
L’API cloud di per sé non ha un limite rigido, ma per file molto grandi dovresti trasmettere lo stream del JSON e memorizzare nella cache i codici a barre, come descritto nella sezione delle prestazioni. -
Devo avere una licenza separata per Aspose.Cells quando creo il file XLSX?
No. La generazione del file XLSX viene eseguita localmente con OpenPyXL, quindi solo l’Aspose.BarCode Cloud SDK richiede una licenza per le chiamate cloud.