Das Konvertieren von rohen JSON Daten in polierte XLSX Berichte ist ein häufiges Bedürfnis für Python‑Entwickler, die an Analyse‑Dashboards arbeiten. Aspose.BarCode Cloud SDK for Python bietet eine leistungsstarke Bibliothek, die die Barcode‑Generierung und Dateiverwaltung in der Cloud vereinfacht. In diesem Leitfaden lernen Sie die JSON‑zu‑XLSX‑Konvertierung in Python, von der Einrichtung des SDK bis zur Erzeugung von Barcode‑Bildern und dem Export der finalen Tabelle. Am Ende haben Sie ein wiederverwendbares Skript, das für Produktions‑Workloads bereit ist.
Bevor Sie beginnen: Voraussetzungen und Installation
Um diesem Tutorial zu folgen, benötigen Sie:
- Python 3.7 oder neuer auf Ihrem Rechner installiert.
- Eine IDE oder ein Texteditor Ihrer Wahl (VS Code, PyCharm usw.).
- Ein Aspose Cloud‑Konto mit Client Id und Client Secret.
- Internetzugang für die Cloud‑API‑Aufrufe.
Installieren Sie die erforderlichen Pakete mit pip:
pip install aspose-barcode-cloud openpyxl
Laden Sie das SDK von der offiziellen Release‑Seite herunter, wenn Sie eine manuelle Installation bevorzugen: Download Aspose.BarCode Cloud SDK for Python.
Konfigurieren Sie Ihre Anmeldeinformationen, bevor Sie API‑Aufrufe tätigen:
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
Wenn die Umgebung bereit ist, können wir mit der Implementierung fortfahren.
Schritt für Schritt: JSON-zu-XLSX-Konvertierung in Python
Schritt 1: Laden der Quell‑JSON‑Datei
Lesen Sie das JSON‑Array, das die Daten enthält, die Sie exportieren möchten.
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
Schritt 2: Arbeitsmappe und Kopfzeile vorbereiten
Erstellen Sie eine Excel-Arbeitsmappe mit OpenPyXL und schreiben Sie die Spaltenüberschriften.
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)
Schritt 3: Barcode-Bilder generieren
Verwenden Sie Aspose.BarCode Cloud, um für jeden Datensatz einen PNG Barcode zu erstellen.
Die API-Referenz für BarcodeApi.generate_barcode ist in der API-Referenz verfügbar.
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
Schritt 4: Barcodes in das Arbeitsblatt einfügen
Cache identische Barcodes, um redundante API-Aufrufe zu vermeiden, und betten Sie anschließend das Bild ein.
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)
Schritt 5: Spalten automatisch anpassen und die Arbeitsmappe speichern
Datei finalisieren und auf die Festplatte schreiben.
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}'.")
Mit diesen Schritten ist die JSON‑zu‑XLSX‑Konvertierung abgeschlossen, und jede Zeile enthält jetzt ein Barcode‑Bild, das von Aspose.BarCode erzeugt wurde.
Vollständiges JSON zu XLSX Skript in Python - Komplettes Codebeispiel
Das folgende Beispiel demonstriert die End‑zu‑End‑Implementierung der JSON‑zu‑XLSX‑Konvertierung mit 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}'.")
Hinweis: Dieses Codebeispiel demonstriert die Kernfunktionalität. Bevor Sie es in Ihrem Projekt verwenden, stellen Sie sicher, dass Sie die Dateipfade (
input.json,output.xlsxusw.) an Ihre tatsächlichen Speicherorte anpassen, überprüfen Sie, dass alle erforderlichen Abhängigkeiten ordnungsgemäß installiert sind, und testen Sie gründlich in Ihrer Entwicklungsumgebung. Wenn Sie auf Probleme stoßen, lesen Sie bitte die offizielle Dokumentation oder wenden Sie sich an das Support-Team für Unterstützung.
Ausführen derselben Aufgabe mit cURL und der REST-API
Wenn Sie einen reinen REST‑Ansatz bevorzugen, können Sie dasselbe Ergebnis mit ein paar cURL‑Befehlen erzielen. Der Workflow spiegelt die Python‑Implementierung wider: Sie erhalten ein Zugriffstoken, laden die JSON‑Datei hoch, generieren Barcodes, erstellen die XLSX‑Datei und laden das Ergebnis herunter.
1. Authentifizieren und ein Zugriffstoken erhalten
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"
Die Antwort enthält access_token, das Sie in nachfolgenden Aufrufen verwenden.
2. Laden Sie die Quell‑JSON‑Datei in den Aspose Cloud Storage hoch
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. Generieren eines Barcode-Bildes für einen Beispielwert
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. JSON in XLSX konvertieren mit 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. Herunterladen der resultierenden XLSX-Datei
curl -X GET "https://api.aspose.cloud/v3.0/storage/file/output.xlsx" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-o output.xlsx
Diese Befehle zeigen, wie dieselbe JSON‑zu‑XLSX‑Konvertierung ohne Schreiben von Code durchgeführt werden kann. Weitere Details finden Sie in der offiziellen API‑Dokumentation.
Konfigurieren von Konvertierungsoptionen für optimale Ergebnisse
Aspose.BarCode Cloud bietet mehrere Parameter, die Sie anpassen können, um Ihr Projekt zu optimieren:
- Barcode-Typ - Wählen Sie aus
EncodeBarcodeType.CODE_128,EncodeBarcodeType.QR,EncodeBarcodeType.PDF_417, usw. - Bildformat - PNG ist Standard, aber Sie können
jpegodergifanfordern, indem Sie das Feldformatändern. - Bildgröße - Passen Sie
img.widthundimg.heightim Skript an, um die Auflösung zu steuern. - Spaltenbreite - Ändern Sie
ws.column_dimensions[column_letter].width, um längeren Text anzupassen.
Beispiel für das Ändern des Barcode-Typs und des Bildformats:
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()
Optimierung der Leistung für große JSON-Datensätze
Wenn Sie mit Tausenden von Datensätzen arbeiten, sollten Sie diese Optimierungen in Betracht ziehen:
- Stream JSON statt die gesamte Datei zu laden - Verwenden Sie
ijson, um über Datensätze zu iterieren, ohne die gesamte Liste im Speicher zu behalten. - Wiederholte Barcodes zwischenspeichern - Das
barcode_cache-Dictionary im Beispielcode verhindert doppelte API-Aufrufe für identische Werte. - Bilder sinnvoll skalieren - Kleinere Barcode-Bilder reduzieren den Speicherverbrauch und beschleunigen das Speichern der Arbeitsmappe.
- Zeilen stapelweise schreiben - OpenPyXL ermöglicht das Schreiben von Zeilen in Chargen; das Gruppieren von Schreibvorgängen kann den Overhead verringern.
Wenn Sie diese Tipps befolgen, bleibt die Konvertierung selbst bei riesigen Datensätzen schnell und speichereffizient.
Fazit
Die JSON‑zu‑XLSX‑Konvertierung in Python wird einfach, wenn Sie die Leistungsfähigkeit des Aspose.BarCode Cloud SDK for Python nutzen. Dieser Leitfaden führt Sie durch die Einrichtung der Umgebung, die Barcode‑Erstellung, die Arbeitsmappen‑Erstellung und die Leistungsoptimierung und bietet Ihnen eine solide Grundlage für den Aufbau von Reporting‑Pipelines. Denken Sie daran, dass für den Produktionseinsatz eine kommerzielle Lizenz erforderlich ist; Sie können die Preisoptionen auf der Produktseite prüfen oder eine temporäre Lizenz von der temporären Lizenzseite erhalten. Mit dem bereitgestellten Code und den bewährten Empfehlungen sind Sie bereit, zuverlässige Datenexport‑Funktionalität in Ihre Anwendungen zu integrieren.
FAQs
-
Wie kann ich die Konvertierung von JSON zu XLSX in Python implementieren, ohne meine eigene Barcode-Logik zu schreiben?
Verwenden Sie das Aspose.BarCode Cloud SDK, um Barcodes automatisch zu erzeugen, und kombinieren Sie es mit OpenPyXL zur Erstellung von Excel-Dateien, wie im vollständigen Codebeispiel gezeigt. -
Was ist die empfohlene Vorgehensweise, um fehlende Felder in der JSON‑Eingabe zu behandeln?
Greifen Sie auf Wörterbuchwerte mitrecord.get("field_name", "")zu, um einen Standard‑leeren String bereitzustellen, wodurch Laufzeitfehler bei der Befüllung des Arbeitsblatts vermieden werden. -
Gibt es irgendwelche Beschränkungen für die Größe der JSON-Datei, die ich verarbeiten kann?
Die Cloud-API selbst hat keine feste Obergrenze, aber bei sehr großen Dateien sollten Sie das JSON streamen und Barcodes zwischenspeichern, wie im Abschnitt zur Leistung beschrieben. -
Benötige ich eine separate Lizenz für Aspose.Cells beim Erstellen der XLSX-Datei?
Nein. Die XLSX-Erstellung erfolgt lokal mit OpenPyXL, sodass nur das Aspose.BarCode Cloud SDK eine Lizenz für Cloud-Aufrufe benötigt.