Перетворення сирих даних JSON у відшліфовані звіти у форматі XLSX є поширеною потребою для розробників Python, які працюють над аналітичними панелями. Aspose.BarCode Cloud SDK for Python надає потужну бібліотеку, що спрощує генерацію штрих‑кодів та роботу з файлами в хмарі. У цьому посібнику ви дізнаєтеся про конвертацію JSON у XLSX за допомогою Python, від налаштування SDK до створення зображень штрих‑кодів та експорту фінальної електронної таблиці. Після завершення у вас буде багаторазовий скрипт, готовий до виробничих навантажень.

Перш ніж почати: Попередні вимоги та встановлення

Щоб слідувати цьому підручнику, вам потрібно:

  • Python 3.7 або новіший, встановлений на вашому комп’ютері.
  • IDE або текстовий редактор за вашим вибором (VS Code, PyCharm тощо).
  • Обліковий запис Aspose Cloud з Client Id та Client Secret.
  • Доступ до інтернету для викликів хмарного API.

Встановіть необхідні пакети за допомогою pip:

pip install aspose-barcode-cloud openpyxl

Завантажте SDK з офіційної сторінки випуску, якщо ви віддаєте перевагу ручному встановленню: Download 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: Створення зображень штрих‑коду

Використовуйте Aspose.BarCode Cloud, щоб створити 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 завершена, і кожен рядок тепер містить зображення штрихкоду, згенероване за допомогою 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. Створити зображення штрих‑коду для зразкового значення

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 у скрипті, щоб контролювати роздільну здатність.
  • Ширина стовпця - Змініть ws.column_dimensions[column_letter].width, щоб вмістити довший текст.

Приклад зміни типу штрих‑коду та формату зображення:

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_cache у прикладі коду запобігає дублюванню викликів API для однакових значень.
  3. Оптимально змінювати розмір зображень - Менші зображення штрих‑кодів зменшують використання пам’яті та прискорюють збереження робочої книги.
  4. Пакетний запис рядків - OpenPyXL дозволяє записувати рядки пакетно; групування записів може знизити накладні витрати.

Застосування цих порад дозволить зберегти швидкість та ефективність використання пам’яті під час конвертації навіть для великих наборів даних.

Висновок

Конвертація JSON у XLSX у Python стає простою, коли ви використовуєте потужність Aspose.BarCode Cloud SDK for Python. У цьому посібнику вас проведено через налаштування середовища, генерацію штрих‑коду, створення робочої книги та оптимізацію продуктивності, що дає міцну основу для побудови конвеєрів звітності. Пам’ятайте, що для виробничих розгортань потрібна комерційна ліцензія; ви можете ознайомитися з варіантами ціноутворення на сторінці продукту або отримати тимчасову ліцензію на сторінці тимчасової ліцензії. Завдяки наданому коду та рекомендаціям щодо кращих практик, ви готові інтегрувати надійну функціональність експорту даних у ваші застосунки.

Часті питання

  • Як я можу реалізувати конвертацію JSON у XLSX у Python без написання власної логіки штрих‑коду?
    Використовуйте Aspose.BarCode Cloud SDK для автоматичного генерування штрих‑коду та поєднайте його з OpenPyXL для створення Excel, як продемонстровано у повному прикладі коду.

  • Який рекомендований спосіб обробки відсутніх полів у JSON‑вводі?
    Отримуйте значення зі словника за допомогою record.get("field_name", ""), щоб надати порожній рядок за замовчуванням, запобігаючи помилкам під час заповнення листа.

  • Чи існують обмеження щодо розміру JSON‑файлу, який я можу обробляти?
    Саме хмарне API не має жорсткого обмеження, але для дуже великих файлів слід потоково обробляти JSON і кешувати штрихкоди, як описано в розділі продуктивності.

  • Чи потрібна окрема ліцензія для Aspose.Cells під час створення файлу XLSX?
    Ні. Генерація XLSX виконується локально за допомогою OpenPyXL, тому лише Aspose.BarCode Cloud SDK потребує ліцензії для хмарних викликів.

Читати далі