from spire.xls import Workbook, FileFormat
# Создание книги
workbook = Workbook()
workbook.LoadFromFile(r"C:\Users\Administrator\Desktop\invoice-template.xlsx")
# Получение рабочего листа
sheet = workbook.Worksheets[0]
# ==========================================
# Данные счёта
# ==========================================
invoice = {
"company_name": "ABC Corporation",
"address_1": "123 Main Street",
"address_2": "New York, NY 10001",
"phone": "+1 (555) 123-4567",
"invoice_number": "INV-2026-001",
"customer_id": "CUST-1001",
"items": [
{
"qty": 2,
"description": "Laptop Computer",
"unit_price": 899.00
},
{
"qty": 1,
"description": "Wireless Mouse",
"unit_price": 29.99
},
{
"qty": 3,
"description": "USB-C Cable",
"unit_price": 12.50
}
]
}
# ==========================================
# Заполнение информации о счёте
# ==========================================
# C7-C10
sheet.Range["C7"].Text = invoice["company_name"]
sheet.Range["C8"].Text = invoice["address_1"]
sheet.Range["C9"].Text = invoice["address_2"]
sheet.Range["C10"].Text = invoice["phone"]
# E8-E9
sheet.Range["E8"].Text = invoice["invoice_number"]
sheet.Range["E9"].Text = invoice["customer_id"]
# ==========================================
# Заполнение позиций счёта
# ==========================================
start_row = 16
for index, item in enumerate(invoice["items"]):
row = start_row + index
sheet.Range[f"B{row}"].NumberValue = item["qty"]
sheet.Range[f"C{row}"].Text = item["description"]
sheet.Range[f"D{row}"].NumberValue = item["unit_price"]
# ==========================================
# Пересчёт формул
# ==========================================
workbook.CalculateAllValue()
# ==========================================
# Экспорт в PDF
# ==========================================
sheet.PageSetup.LeftMargin = 0.0
sheet.PageSetup.RightMargin = 0.0
sheet.PageSetup.TopMargin = 0.0
sheet.PageSetup.BottomMargin = 0.0
# Вместить лист на одну страницу
workbook.ConverterSetting.SheetFitToPage = True
# Для длинного счёта, превышающего одну страницу, установите FitToPagesTall = 0,
# чтобы разрешить размещение на нескольких страницах по вертикали
# sheet.PageSetup.FitToPagesWide = 1
# sheet.PageSetup.FitToPagesTall = 0
workbook.SaveToFile(
"Invoice.pdf",
FileFormat.PDF
)
workbook.Dispose()