v1.1
This commit is contained in:
		
							parent
							
								
									8f47f0248e
								
							
						
					
					
						commit
						f97091da21
					
				| 
						 | 
				
			
			@ -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")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue