Вставьте изображение в Excel с openpyxl

Мой компьютер вышел из строя, и мне пришлось переустановить все мои библиотеки; После завершения установки я понял, что некоторые библиотеки обновлены до новой версии, и мой код больше не работает (из-за новой версии openpyxl).

Я пытаюсь вставить изображение в файл Excel, но не понимаю сообщений об ошибках, которые появляются. Другие вопросы, похоже, относятся к более старым версиям openpyxl (для которых работал мой оригинальный код), но не работают для текущей версии openpyxl. Мы ценим вашу помощь в понимании того, как исправить мой код.:)

Оригинальный код (который работает):

import openpyxl
wb = openpyxl.load_workbook(filename)
ws = wb.get_sheet_by_name(sheet_name)
img = openpyxl.drawing.image.Image(img_name)
img.anchor(ws['D2'])
ws.add_image(img)
wb.save(filename)

Текущий код (который не работает):

import openpyxl
wb = openpyxl.load_workbook(filename)
ws = wb[sheet_name]
img = openpyxl.drawing.image.Image(img_name)
img.anchor(ws.cell(row=2,column=4))
ws.add_image(img)
wb.save(filename)

Сообщение об ошибке:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-9efc1289cc73> in <module>()
----> 1 img.anchor(ws.cell(row=2,column=4))

TypeError: 'str' object is not callable

Есть намеки?

Спасибо

РЕДАКТИРОВАТЬ: очевидно, img.anchor теперь строка; Я понятия не имею, что это было раньше, но, очевидно, не было строкой (так как не было сообщения об ошибке. При переходе к следующему теперь устанавливается привязка, но я получаю другое сообщение об ошибке.

Устанавливает якорь:

img.anchor = ws.cell(row=2,column=4)
ws.add_image(img)

Но теперь сбой при попытке сохранить:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-13-2cfd938ccf60> in <module>()
      1 img.anchor = ws.cell(row=2,column=4)
      2 ws.add_image(img)
----> 3 wb.save(filename)

AttributeError: 'Cell' object has no attribute 'upper'

1 ответ

Прикольные вещи. Очевидно, что между любой версией openpyxl, которая была у меня, и той, что у меня сейчас (2.5.5), img.anchor менял типы. Теперь это строка вместо местоположения на рабочем листе, поэтому вам нужно просто установить его в местоположение (в моем случае: 'D2') вместо местоположения на рабочем листе (НЕ ИСПОЛЬЗУЙТЕ ws['D2']). Подводя итог, при попытке вставить изображение с openpyxl 2.5.5, используйте следующее:

import openpyxl
wb = openpyxl.load_workbook(filename)
ws = wb[sheet_name]
img = openpyxl.drawing.image.Image(img_name)
img.anchor = 'D2' # Or whatever cell location you want to use.
ws.add_image(img)
wb.save(filename)
Другие вопросы по тегам