Excel с изображениями в ячейках

Данный код принимает в 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()