This commit is contained in:
Rostislav Orlovskyi 2024-06-28 22:27:15 +03:00
parent 8f47f0248e
commit f97091da21
1 changed files with 30 additions and 15 deletions

View File

@ -2,6 +2,7 @@ import openpyxl
from openpyxl.drawing.image import Image from openpyxl.drawing.image import Image
import requests import requests
from io import BytesIO from io import BytesIO
from PIL import Image
from models import Product from models import Product
@ -16,9 +17,23 @@ except Exception as e:
wb = openpyxl.Workbook() wb = openpyxl.Workbook()
ws = wb.active ws = wb.active
ws.title = "Sheet" ws.title = "Sheet"
# Захист об'єктів
ws.protection.objects = True
ws.protection.password = '' # Увімкнення захисту листа з налаштуваннями
ws.protection.objects = False # Заборонити редагування об'єктів (наприклад, зображень)
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 # Зміна ширини стовпця до 200px
ws.column_dimensions["A"].width = ws.column_dimensions["B"].width = 200 / 7 # встановлюємо ширину стовпця у символах ws.column_dimensions["A"].width = ws.column_dimensions["B"].width = 200 / 7 # встановлюємо ширину стовпця у символах
@ -30,19 +45,23 @@ def add_to_file(product, row_num):
ws.row_dimensions[row_num].height = 200 * 0.75 ws.row_dimensions[row_num].height = 200 * 0.75
try: try:
# Отримання зображення # Координати клітинки фото
response = requests.get(product.photo_url) photo_coordinates = 'B' + str(row_num)
img_data = BytesIO(response.content)
# Об'єкт зображення
img = Image(img_data)
# Додаємо зображення на лист photo = Image.open(requests.get(product.photo_url, stream=True).raw)
ws.add_image(img, 'B' + str(row_num)) 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: except requests.exceptions.HTTPError as http_err:
print(f"HTTP помилка: {http_err}") print(f"HTTP помилка: {http_err}")
except requests.exceptions.RequestException as req_err: except requests.exceptions.RequestException as req_err:
print(f"Помилка запиту: {req_err}") print(f"Помилка запиту: {req_err}")
except Exception as e:
print(f"Виникла помилка: {e}")
# Координати клітинки назви товару # Координати клітинки назви товару
@ -52,16 +71,12 @@ def add_to_file(product, row_num):
# Стилізація: перенесення тексту, позиціювання по центру у вертикалі # Стилізація: перенесення тексту, позиціювання по центру у вертикалі
ws[name_coordinates].alignment = openpyxl.styles.Alignment(vertical='center', wrap_text=True) ws[name_coordinates].alignment = openpyxl.styles.Alignment(vertical='center', wrap_text=True)
#Запис до файлу #Запис до файлу
for i in range(len(selected_products)): for i in range(len(selected_products)):
# Виклик функції запису # Виклик функції запису
add_to_file(selected_products[i], i+1) add_to_file(selected_products[i], i+1)
# Встановлюємо захист для всього листа з паролем
ws.protection.enable()
# Збережння файлу # Збережння файлу
wb.save("products.xlsx") wb.save("products.xlsx")