Products_xlsx/db_to_xlsx.py

68 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import openpyxl
from openpyxl.drawing.image import Image
import requests
from io import BytesIO
from models import Product
# Отримання товарів із фото
try:
selected_products = Product.select().where(Product.photo_url.is_null(False)).limit(20)
except Exception as e:
print(f"Виникла помилка: {e}")
# Створення воркбуку та аркушу
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "Sheet"
# Захист об'єктів
ws.protection.objects = True
ws.protection.password = ''
# Зміна ширини стовпця до 200px
ws.column_dimensions["A"].width = ws.column_dimensions["B"].width = 200 / 7 # встановлюємо ширину стовпця у символах
# Додавання назви та фото товару до аркушу ws
def add_to_file(product, row_num):
# Встановлення висоти рядка 200px
ws.row_dimensions[row_num].height = 200 * 0.75
try:
# Отримання зображення
response = requests.get(product.photo_url)
img_data = BytesIO(response.content)
# Об'єкт зображення
img = Image(img_data)
# Додаємо зображення на лист
ws.add_image(img, 'B' + str(row_num))
except requests.exceptions.HTTPError as http_err:
print(f"HTTP помилка: {http_err}")
except requests.exceptions.RequestException as req_err:
print(f"Помилка запиту: {req_err}")
# Координати клітинки назви товару
name_coordinates = 'A' + str(row_num)
# Запис назви товару
ws[name_coordinates] = selected_products[i].product_name
# Стилізація: перенесення тексту, позиціювання по центру у вертикалі
ws[name_coordinates].alignment = openpyxl.styles.Alignment(vertical='center', wrap_text=True)
#Запис до файлу
for i in range(len(selected_products)):
# Виклик функції запису
add_to_file(selected_products[i], i+1)
# Встановлюємо захист для всього листа з паролем
ws.protection.enable()
# Збережння файлу
wb.save("products.xlsx")