การแปลงข้อมูลดิบ 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 จากหน้าปล่อยอย่างเป็นทางการ หากคุณต้องการการติดตั้งด้วยตนเอง: ดาวน์โหลด 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 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 - ตัวอย่างโค้ดสมบูรณ์
ตัวอย่างต่อไปนี้แสดงการทำงานแบบ end‑to‑end ของการแปลง 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 ขนาดใหญ่
เมื่อจัดการกับข้อมูลหลายพันรายการ ให้พิจารณาการปรับแต่งเหล่านี้:
- สตรีม JSON แทนการโหลดไฟล์ทั้งหมด - ใช้
ijsonเพื่อวนซ้ำผ่านเรคคอร์ดโดยไม่ต้องเก็บรายการทั้งหมดในหน่วยความจำ. - แคชบาร์โค้ดที่ซ้ำกัน - พจนานุกรม
barcode_cacheในโค้ดตัวอย่างช่วยป้องกันการเรียก API ซ้ำสำหรับค่าที่เหมือนกัน. - ปรับขนาดรูปภาพอย่างชาญฉลาด - รูปบาร์โค้ดขนาดเล็กช่วยลดการใช้หน่วยความจำและเร่งการบันทึกเวิร์กบุ๊ก.
- เขียนแถวเป็นชุด - OpenPyXL อนุญาตให้เขียนแถวเป็นกลุ่ม; การจัดกลุ่มการเขียนสามารถลดภาระได้.
การใช้เคล็ดลับเหล่านี้จะทำให้การแปลงเร็วและใช้หน่วยความจำอย่างมีประสิทธิภาพแม้กับชุดข้อมูลขนาดมหาศาล
สรุป
JSON to XLSX conversion in Python becomes straightforward when you leverage the power of Aspose.BarCode Cloud SDK for Python. คู่มือนี้พาคุณผ่านการตั้งค่าสภาพแวดล้อม, การสร้างบาร์โค้ด, การสร้างเวิร์กบุ๊ก, และการปรับประสิทธิภาพ, ให้คุณมีพื้นฐานที่มั่นคงสำหรับการสร้าง pipeline รายงาน. จำไว้ว่าใบอนุญาตเชิงพาณิชย์จำเป็นสำหรับการใช้งานในสภาพแวดล้อมการผลิต; คุณสามารถสำรวจตัวเลือกการกำหนดราคาได้บนหน้าผลิตภัณฑ์หรือรับใบอนุญาตชั่วคราวจาก หน้าลิขสิทธิ์ชั่วคราว. ด้วยโค้ดที่ให้มาและคำแนะนำแนวปฏิบัติที่ดีที่สุด, คุณพร้อมที่จะรวมฟังก์ชันการส่งออกข้อมูลที่เชื่อถือได้เข้าไปในแอปพลิเคชันของคุณ.
คำถามที่พบบ่อย
-
ฉันจะทำการแปลง 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 ที่ต้องการใบอนุญาตสำหรับการเรียกใช้คลาวด์