Вставить изображение с помощью xlwt Python Odoo? - PullRequest
0 голосов
/ 09 января 2019

Я использую Odoo 10. И я пытаюсь вставить изображение логотипа в лист Excel, используя библиотеку xlwt. Я попробовал решение по следующей ссылке, но оно не работает для меня.

Вставьте базу изображений 64 в Excel, используя xlwt

Мой код:

from PIL import Image

img = Image.open("/my_module/static/description/logo.png")
r, g, b, a = img.split()
img = Image.merge("RGB", (r, g, b))
img.save('imagetoadd.bmp')
xlwt.insert_bitmap('imagetoadd.bmp', 0, 0)

Ошибка: IOError: [Errno 2] Нет такого файла или каталога: '/my_module/static/description/logo.png'

Я дважды проверил мой путь и правильное написание, и я перезапустил сервер, тоже обновленный.

Когда я даю полный путь следующим образом: /home/username/folder/custom-addons/my_module/static/description/logo.png Я получаю следующую ошибку: ValueError: для распаковки нужно более 3 значений

Пожалуйста, помогите, как мне добиться этой вставки изображения в лист Excel с помощью xlwt. Спасибо!

1 Ответ

0 голосов
/ 09 января 2019

Эта ошибка ValueError: need more than 3 values to unpack, вероятно, происходит, потому что img.split() возвращает кортеж из менее чем 4 элементов, в то время как вы unpacking для 4 переменных, r g b a. Проверьте длину img.split() return и присвойте переменной соответственно или используйте индексирование для доступа к первым 3 элементам, таким как

image_parts = img.split()
r = image_parts[0]
g = image_parts[1]
b = image_parts[2]

Обновление:

from PIL import Image
import xlsxwriter
from io import BytesIO

workbook   = xlsxwriter.Workbook('filename.xlsx')
worksheet1 = workbook.add_worksheet()
img = Image.open("/home/username/folder/custom-addons/my_module/static/description/logo.png")
image_parts = img.split()
r = image_parts[0]
g = image_parts[1]
b = image_parts[2]
img = Image.merge("RGB", (r, g, b))
fo = BytesIO()
img.save(fo, format='bmp')
worksheet1.insert_image('A1', 'python.png', {'image_data': fi})
workbook.close()

Хорошо, я нашел нужную функцию в библиотеке xlwt из ее исходного кода.

from PIL import Image
import xlwt
from io import BytesIO

workbook   = xlwt.Workbook()
worksheet1 = workbook.add_sheet('Test')
img = Image.open("/home/username/folder/custom-addons/my_module/static/description/logo.png")
image_parts = img.split()
r = image_parts[0]
g = image_parts[1]
b = image_parts[2]
img = Image.merge("RGB", (r, g, b))
fo = BytesIO()
img.save(fo, format='bmp')
worksheet1.insert_bitmap_data(fo.getvalue(),0,0)
workbook.save('filename.xls')
img.close()
...