Данный код принимает в file_input xlsx таблицу, где колонка с заголовком Изображения содержит пути к изображениям через запятую. Загружает первое изображение, если оно еще не было загружено ранее, уменьшает его до 250 пикселей, и добавляет в последнюю ячейку. Ячейки заданы вручную, при необходимости нужно править под себя.
Перед выполнением необходимо установить зависимости:
<i>pip install pandas pillow xlsxwriter requests</i>
После установки зависимостей, сохранить данный скрипт в файл и запустить из командной строки. Необходимые файлы должны быть в корневой директории.
import pandas as pd
import requests
from io import BytesIO
from PIL import Image
import os
# Параметры
images_header = 'Изображения'
file_input = 'В наличии.xlsx'
file_output = 'В_наличии_with_images.xlsx'
excel_file_path = file_input
df = pd.read_excel(excel_file_path)
# Создаем новый Excel файл
excel_file = file_output
writer = pd.ExcelWriter(excel_file,<i>engine</i>
='xlsxwriter')
# Записываем DataFrame в Excel
df.to_excel(writer,<i>sheet_name</i>
='Sheet1',
<i>index</i>
=False)
# Получаем объект workbook и worksheet
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# Устанавливаем высоту строки
worksheet.set_row(0, 100) # Первая строка
# Проходим по каждой строке и вставляем изображение
for index, row in df.iterrows():
image_url = row[images_header]
if pd.notna(image_url):
image_urls = row[images_header].split(',')
image_url = image_urls[0] if image_urls else ''
worksheet.set_row(index + 1, 100)
if pd.notna(image_url) and image_url:
local_image_path =<i>f</i>
'image_{index}.jpg'
if os.path.exists(local_image_path):
print(<i>f</i>
'Изображение уже загружено: {image_url} > {local_image_path}')
if not os.path.exists(local_image_path):
print(<i>f</i>
'Загрузка изображения: {image_url}')
response = requests.get(image_url)
img = Image.open(BytesIO(response.content))
img = img.resize((250,250))
img.save(local_image_path)
text_anchor =<i>f</i>
'H{index + 2}' # +2, потому что индексация в Excel начинается с 1
worksheet.write(text_anchor, image_url)
# Вставляем изображение в последнюю ячейку строки
img_anchor =<i>f</i>
'I{index + 2}' # +2, потому что индексация в Excel начинается с 1
worksheet.insert_image(img_anchor, local_image_path, {'x_scale': 0.5, 'y_scale': 0.5, 'x_offset': 0, 'y_offset': 0, 'object_position': 1})
# Сохраняем Excel файл
writer._save()