Η μετατροπή ακατέργαστων δεδομένων JSON σε επαγγελματικές αναφορές XLSX είναι συχνή ανάγκη για προγραμματιστές Python που εργάζονται σε πίνακες αναλύσεων. Το Aspose.BarCode Cloud SDK for Python παρέχει μια ισχυρή βιβλιοθήκη που απλοποιεί τη δημιουργία barcode και τη διαχείριση αρχείων στο cloud. Σε αυτόν τον οδηγό θα μάθετε τη μετατροπή JSON σε XLSX με Python, από τη ρύθμιση του SDK μέχρι τη δημιουργία εικόνων barcode και την εξαγωγή του τελικού φύλλου εργασίας. Στο τέλος θα έχετε ένα επαναχρησιμοποιήσιμο script έτοιμο για παραγωγικές εργασίες.

Πριν ξεκινήσετε: Προαπαιτούμενα και εγκατάσταση

Για να ακολουθήσετε αυτό το σεμινάριο χρειάζεστε:

  • Python 3.7 ή νεότερη εγκατεστημένη στο μηχάνημά σας.
  • Ένα IDE ή κειμενογράφο της επιλογής σας (VS Code, PyCharm κ.λπ.).
  • Ένας λογαριασμός Aspose Cloud με Client Id και Client Secret.
  • Πρόσβαση στο διαδίκτυο για τις κλήσεις του cloud API.

Εγκαταστήστε τα απαιτούμενα πακέτα με το pip:

pip install aspose-barcode-cloud openpyxl

Κατεβάστε το SDK από τη σελίδα επίσημης κυκλοφορίας εάν προτιμάτε μια χειροκίνητη εγκατάσταση: Κατεβάστε Aspose.BarCode Cloud SDK for Python.

Διαμορφώστε τα διαπιστευτήριά σας πριν κάνετε κλήσεις 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

Με το περιβάλλον έτοιμο, μπορούμε να προχωρήσουμε στην υλοποίηση.

Κατασκευή βήμα προς βήμα: Μετατροπή JSON σε XLSX με Python

Βήμα 1: Φόρτωση του Πηγαίου Αρχείου JSON

Διαβάστε τον πίνακα JSON που περιέχει τα δεδομένα που θέλετε να εξάγετε.

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

Βήμα 2: Προετοιμασία του Φύλλου Εργασίας και της Γραμμής Κεφαλίδας

Δημιουργήστε ένα βιβλίο εργασίας Excel με το OpenPyXL και γράψτε τις επικεφαλίδες των στηλών.

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)

Βήμα 3: Δημιουργία εικόνων Barcode

Χρησιμοποιήστε το Aspose.BarCode Cloud για να δημιουργήσετε ένα barcode τύπου PNG για κάθε εγγραφή.
Η αναφορά API για BarcodeApi.generate_barcode είναι διαθέσιμη στην αναφορά 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

Βήμα 4: Εισαγωγή γραμμωτών κωδίκων στο φύλλο εργασίας

Αποθηκεύστε στην κρυφή μνήμη τα ίδια γραμμωτά κώδικες για να αποφύγετε περιττές κλήσεις API, στη συνέχεια ενσωματώστε την εικόνα.

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)

Βήμα 5: Αυτόματη προσαρμογή στηλών και αποθήκευση του βιβλίου εργασίας

Ολοκληρώστε το αρχείο και γράψτε το στο δίσκο.

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}'.")

Με αυτά τα βήματα η μετατροπή JSON σε XLSX ολοκληρώθηκε, και κάθε γραμμή περιέχει τώρα μια εικόνα barcode που δημιουργήθηκε από Aspose.BarCode.

Πλήρες Σενάριο JSON σε XLSX σε Python - Πλήρες Παράδειγμα Κώδικα

Το παρακάτω παράδειγμα δείχνει την υλοποίηση από άκρο σε άκρο της μετατροπής JSON σε XLSX χρησιμοποιώντας το 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}'.")

Σημείωση: Αυτό το παράδειγμα κώδικα δείχνει τη βασική λειτουργικότητα. Πριν το χρησιμοποιήσετε στο έργο σας, βεβαιωθείτε ότι έχετε ενημερώσει τις διαδρομές αρχείων (input.json, output.xlsx, κ.λπ.) ώστε να ταιριάζουν με τις πραγματικές τοποθεσίες των αρχείων σας, επαληθεύστε ότι όλες οι απαιτούμενες εξαρτήσεις είναι σωστά εγκατεστημένες και δοκιμάστε εκτενώς στο περιβάλλον ανάπτυξής σας. Εάν αντιμετωπίσετε προβλήματα, παρακαλούμε ανατρέξτε στην επίσημη τεκμηρίωση ή επικοινωνήστε με την ομάδα υποστήριξης για βοήθεια.

Εκτέλεση της ίδιας εργασίας με cURL και το REST API

Εάν προτιμάτε μια καθαρή προσέγγιση REST, μπορείτε να πετύχετε το ίδιο αποτέλεσμα με μερικές εντολές cURL. Η ροή εργασίας αντικατοπτρίζει την υλοποίηση σε Python: αποκτήστε ένα διακριτικό πρόσβασης, ανεβάστε το αρχείο JSON, δημιουργήστε γραμμικούς κώδικες, δημιουργήστε το αρχείο XLSX και κατεβάστε το αποτέλεσμα.

1. Έλεγχος ταυτότητας και λήψη διακριτικού πρόσβασης

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"

Η απάντηση περιέχει access_token το οποίο θα χρησιμοποιήσετε στις επόμενες κλήσεις.

2. Μεταφόρτωση του Πηγαίου Αρχείου JSON στο 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. Δημιουργία εικόνας barcode για ένα δείγμα τιμής

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 σε XLSX χρησιμοποιώντας το 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. Λήψη του παραγόμενου αρχείου XLSX

curl -X GET "https://api.aspose.cloud/v3.0/storage/file/output.xlsx" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -o output.xlsx

Αυτές οι εντολές δείχνουν πώς μπορεί να εκτελεστεί η ίδια μετατροπή JSON σε XLSX χωρίς να γράψετε κώδικα. Για περισσότερες λεπτομέρειες, δείτε την επίσημη τεκμηρίωση API.

Διαμόρφωση Επιλογών Μετατροπής για Βέλτιστα Αποτελέσματα

Το Aspose.BarCode Cloud προσφέρει αρκετές παραμέτρους που μπορείτε να ρυθμίσετε ώστε να ταιριάζουν στο έργο σας:

  • Τύπος γραμμωτού κώδικα - Επιλέξτε από EncodeBarcodeType.CODE_128, EncodeBarcodeType.QR, EncodeBarcodeType.PDF_417, κ.λπ.
  • Μορφή εικόνας - Το PNG είναι προεπιλογή, αλλά μπορείτε να ζητήσετε jpeg ή gif αλλάζοντας το πεδίο format.
  • Μέγεθος εικόνας - Ρυθμίστε το img.width και το img.height στο script για να ελέγξετε την ανάλυση.
  • Πλάτος στήλης - Τροποποιήστε το ws.column_dimensions[column_letter].width ώστε να χωράει μεγαλύτερο κείμενο.

Παράδειγμα αλλαγής του τύπου barcode και της μορφής εικόνας:

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()

Βελτιστοποίηση της Απόδοσης για Μεγάλα Σύνολα Δεδομένων JSON

Όταν εργάζεστε με χιλιάδες εγγραφές, λάβετε υπόψη αυτές τις βελτιστοποιήσεις:

  1. Ροή JSON αντί για φόρτωση ολόκληρου αρχείου - Χρησιμοποιήστε το ijson για να επαναλαμβάνετε τις εγγραφές χωρίς να διατηρείτε ολόκληρη τη λίστα στη μνήμη.
  2. Αποθήκευση στην κρυφή μνήμη επαναλαμβανόμενων barcode - Το λεξικό barcode_cache στο παράδειγμα κώδικα αποτρέπει διπλές κλήσεις API για ταυτότιμες τιμές.
  3. Αλλαγή μεγέθους εικόνων με σύνεση - Μικρότερες εικόνες barcode μειώνουν τη χρήση μνήμης και επιταχύνουν την αποθήκευση του βιβλίου εργασίας.
  4. Ομαδική εγγραφή γραμμών - Το OpenPyXL επιτρέπει την εγγραφή γραμμών μαζικά· η ομαδοποίηση των εγγραφών μπορεί να μειώσει το κόστος.

Η εφαρμογή αυτών των συμβουλών θα διατηρήσει τη μετατροπή γρήγορη και αποδοτική ως προς τη μνήμη, ακόμη και για τεράστια σύνολα δεδομένων.

Συμπέρασμα

Η μετατροπή JSON σε XLSX στην Python γίνεται απλή όταν αξιοποιείτε τη δύναμη του Aspose.BarCode Cloud SDK for Python. Αυτός ο οδηγός σας καθοδήγησε μέσω της ρύθμισης του περιβάλλοντος, της δημιουργίας barcode, της δημιουργίας βιβλίου εργασίας και της βελτιστοποίησης απόδοσης, παρέχοντάς σας μια σταθερή βάση για την κατασκευή pipelines αναφοράς. Θυμηθείτε ότι απαιτείται εμπορική άδεια για παραγωγικές αναπτύξεις· μπορείτε να εξερευνήσετε τις επιλογές τιμολόγησης στη σελίδα του προϊόντος ή να αποκτήσετε προσωρινή άδεια από τη σελίδα προσωρινής άδειας. Με τον παρεχόμενο κώδικα και τις συστάσεις βέλτιστων πρακτικών, είστε έτοιμοι να ενσωματώσετε αξιόπιστη λειτουργία εξαγωγής δεδομένων στις εφαρμογές σας.

Συχνές Ερωτήσεις

  • Πώς μπορώ να υλοποιήσω τη μετατροπή JSON σε XLSX σε Python χωρίς να γράψω τη δική μου λογική barcode;
    Χρησιμοποιήστε το Aspose.BarCode Cloud SDK για να δημιουργήσετε barcode αυτόματα και συνδυάστε το με το OpenPyXL για τη δημιουργία Excel, όπως δείχνει το πλήρες παράδειγμα κώδικα.

  • Ποιος είναι ο συνιστώμενος τρόπος για τη διαχείριση των ελλιπών πεδίων στην είσοδο JSON;
    Πρόσβαση στις τιμές του λεξικού με record.get("field_name", "") για να παρέχετε μια προεπιλεγμένη κενή συμβολοσειρά, αποτρέποντας σφάλματα χρόνου εκτέλεσης κατά τη συμπλήρωση του φύλλου εργασίας.

  • Υπάρχουν περιορισμοί στο μέγεθος του αρχείου JSON που μπορώ να επεξεργαστώ;
    Το cloud API από μόνο του δεν έχει σκληρό όριο, αλλά για πολύ μεγάλα αρχεία θα πρέπει να κάνετε streaming του JSON και να αποθηκεύετε τα barcode στην κρυφή μνήμη, όπως περιγράφεται στην ενότητα απόδοσης.

  • Χρειάζομαι ξεχωριστή άδεια για το Aspose.Cells όταν δημιουργώ το αρχείο XLSX;
    Όχι. Η δημιουργία του XLSX γίνεται τοπικά με το OpenPyXL, οπότε μόνο το Aspose.BarCode Cloud SDK απαιτεί άδεια για κλήσεις στο cloud.

Διαβάστε Περισσότερα