將原始的 JSON 資料轉換為精美的 XLSX 報告,是從事分析儀表板的 Python 開發人員常見的需求。Aspose.BarCode Cloud SDK for Python 提供了一個強大的函式庫,可簡化雲端條碼產生與檔案處理。在本指南中,您將學習在 Python 中進行 JSON 到 XLSX 的轉換,從設定 SDK、產生條碼影像到匯出最終試算表。完成後,您將擁有一個可在生產工作負載中重複使用的腳本。
開始之前:先決條件與安裝
要遵循本教程,您需要:
- Python 3.7 或更新版本已安裝在您的機器上。
- 您選擇的 IDE 或文字編輯器 (VS Code、PyCharm 等)。
- 擁有 Client Id 和 Client Secret 的 Aspose Cloud 帳戶。
- 用於雲端 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
環境已就緒,我們可以繼續實作。
逐步構建:Python 中的 JSON 轉 XLSX 轉換
步驟 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:準備工作簿和標題列
使用 OpenPyXL 建立 Excel 工作簿並寫入欄位標題。
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 條碼。
BarcodeApi.generate_barcode 的 API 參考可在 API reference 中取得。
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 腳本 - 完整程式碼範例
以下示例演示了使用 Aspose.BarCode Cloud SDK for Python 將 JSON 轉換為 XLSX 的端到端實作。
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. 使用 Aspose.Cells Cloud 將 JSON 轉換為 XLSX
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,但您可以透過更改
format欄位請求jpeg或gif。 - 影像尺寸 - 在腳本中調整
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 數據集的性能
處理數千筆記錄時,請考慮以下優化措施:
- 串流 JSON 而非載入整個檔案 - 使用
ijson逐筆遍歷記錄,而不必在記憶體中保留整個清單。 - 快取重複的條碼 - 範例程式碼中的
barcode_cache字典可防止對相同值的重複 API 呼叫。 - 明智地調整圖像大小 - 較小的條碼圖像可減少記憶體使用量並加快工作簿儲存速度。
- 批次寫入列 - OpenPyXL 允許批量寫入列;將寫入操作分組可降低開銷。
應用這些技巧即使在處理大量資料集時,也能保持轉換快速且節省記憶體。
結論
在 Python 中將 JSON 轉換為 XLSX 變得簡單,只要利用 Aspose.BarCode Cloud SDK for Python 的強大功能。本指南將帶您完成環境設定、條碼生成、工作簿建立以及效能調校,為構建報表管線提供堅實基礎。請記住,生產環境部署需要商業授權;您可以在產品頁面上查看價格選項,或從 臨時授權頁面 獲取臨時授權。透過提供的程式碼和最佳實踐建議,您已準備好將可靠的資料匯出功能整合到您的應用程式中。
常見問題
-
如何在 Python 中實現 JSON 轉 XLSX 轉換,而無需自行編寫條碼邏輯?
使用 Aspose.BarCode Cloud SDK 自動生成條碼,並結合 OpenPyXL 進行 Excel 建立,如完整程式碼範例所示。 -
建議的處理 JSON 輸入中缺少欄位的方式是什麼?
使用record.get("field_name", "")來存取字典值,提供預設的空字串,以防止在工作表填充期間發生執行時錯誤。 -
我可以處理的 JSON 檔案大小是否有任何限制?
雲端 API 本身沒有硬性限制,但對於非常大的檔案,應該如效能說明中所述,將 JSON 串流處理並快取條碼。 -
在建立 XLSX 檔案時,我需要為 Aspose.Cells 另外取得授權嗎?
不需要。XLSX 的產生是使用 OpenPyXL 在本機執行的,因此只有 Aspose.BarCode Cloud SDK 需要授權以呼叫雲端服務。