Products_xlsx/db_to_xlsx.py

83 lines
2.8 KiB
Python
Raw Permalink 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 PIL import Image
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.scenarios = False
ws.protection.formatCells = False
ws.protection.formatColumns = False
ws.protection.formatRows = False
ws.protection.insertColumns = False
ws.protection.insertRows = False
ws.protection.insertHyperlinks = False
ws.protection.deleteColumns = False
ws.protection.deleteRows = False
ws.protection.selectLockedCells = False
ws.protection.selectUnlockedCells = False
# Зміна ширини стовпця до 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:
# Координати клітинки фото
photo_coordinates = 'B' + str(row_num)
photo = Image.open(requests.get(product.photo_url, stream=True).raw)
img = openpyxl.drawing.image.Image(photo)
ws.add_image(img, photo_coordinates)
# Блокування клітинки з назвою товару
ws[photo_coordinates].protection = openpyxl.styles.Protection(locked=True)
except requests.exceptions.HTTPError as http_err:
print(f"HTTP помилка: {http_err}")
except requests.exceptions.RequestException as req_err:
print(f"Помилка запиту: {req_err}")
except Exception as e:
print(f"Виникла помилка: {e}")
# Координати клітинки назви товару
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)
# Збережння файлу
wb.save("products.xlsx")