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
import requests
from io import BytesIO
from PIL import Image
from models import Product
@ -16,9 +17,23 @@ except Exception as e:
wb = openpyxl.Workbook()
ws = wb.active
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
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
try:
# Отримання зображення
response = requests.get(product.photo_url)
img_data = BytesIO(response.content)
# Об'єкт зображення
img = Image(img_data)
# Координати клітинки фото
photo_coordinates = 'B' + str(row_num)
# Додаємо зображення на лист
ws.add_image(img, '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}")
# Координати клітинки назви товару
@ -52,16 +71,12 @@ def add_to_file(product, row_num):
# Стилізація: перенесення тексту, позиціювання по центру у вертикалі
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")