Вставить изображение в openpyxl
Можно ли вставить изображение (jpeg, png и т.д.) с помощью openpyxl?
В принципе, я хочу разместить сгенерированное изображение с диаграммой под ним.
Я ничего не вижу в документации, которая, кажется, немного отсутствует по сравнению со зрелостью кода.
Ответы
Ответ 1
Следующее вставляет изображение в ячейку A1. Отрегулируйте расположение изображения в соответствии с вашими потребностями или сами обработайте создание изображения PIL и передайте его Image()
import openpyxl
wb = openpyxl.Workbook()
ws = wb.worksheets[0]
img = openpyxl.drawing.image.Image('test.jpg')
img.anchor = 'A1'
ws.add_image(img)
wb.save('out.xlsx')
В старых версиях openpyxl работает следующее:
import openpyxl
wb = openpyxl.Workbook()
ws = wb.worksheets[0]
img = openpyxl.drawing.Image('test.jpg')
img.anchor(ws.cell('A1'))
ws.add_image(img)
wb.save('out.xlsx')
Ответ 2
В текущих версиях openpyxl (по крайней мере, до 2.4.5) вам нужно вызвать Image следующим образом:
img = openpyxl.drawing.image.Image('test.jpg')
Использование примера Anthon:
import openpyxl
wb = openpyxl.Workbook()
ws = wb.worksheets[0]
img = openpyxl.drawing.image.Image('test.jpg')
img.anchor(ws.cell('A1'))
ws.add_image(img)
wb.save('out.xlsx')
Ответ 3
Предоставление полного обновления о том, как это сделать. В этом решении используется версия 2.4.5 openpyxl.
Я загрузил изображение в свой локальный каталог, открыл существующую книгу и сохранил с вставленным изображением.
import openpyxl
from openpyxl import load_workbook
from openpyxl import Workbook
from openpyxl.drawing.image import Image
from openpyxl.utils import coordinate_from_string
openpyxl_version = openpyxl.__version__
print(openpyxl_version) #to see what version I'm running
# downloaded a .png to local directory manually from
# "https://www.python.org/static/opengraph-icon-200x200.png"
#change to the location and name of your image
png_loc = r'c:\users\me\opengraph-icon-200x200.png'
# test.xlsx already exists in my current directory
wb = load_workbook('test.xlsx')
ws = wb.active
my_png = openpyxl.drawing.image.Image(png_loc)
ws.add_image(my_png, 'B3')
wb.save('test.xlsx')
Результаты:
![enter image description here]()
Ответ 4
Этот код работал для меня:
import openpyxl
wb = openpyxl.Workbook()
ws = wb.worksheets[0]
ws.merge_cells('A1:A3')
img = openpyxl.drawing.image.Image('image.jpg')
row_number = 1
col_idx = 1
cell = ws.cell(row=row_number, column=col_idx)
ws.add_image(img)
wb.save('output.xlsx')
Ответ 5
Чтобы добавить, я использовал openpyxl == 2.5.6 (с Python3.65), и мне пришлось использовать img.anchor('A1')
вместо img.anchor(ws.cell('A1'))
.
import openpyxl
wb = openpyxl.Workbook()
ws = wb.worksheets[0]
img = openpyxl.drawing.Image('test.jpg')
img.anchor('A1')
ws.add_image(img)
wb.save('out.xlsx')