Вставьте растровое изображение в файл Excel (xlwt) в GAE

Мне нужно вставить растровое изображение в файл Excel (создание с использованием xlwt). я пытался вставить с помощью метода insert_bimap(), но он возвращает ошибку ввода-вывода.

Ошибка:

Traceback (most recent call last):  
File "C:\Program Files\Google\google_appengine\google\appengine\ext\webapp\_webapp25.py", line 701, in __call__    
   handler.get(*groups)  
File "C:\apps\test.py", line 44, in get
ws0.insert_bitmap('images/logo.gif', 2, 2)
File "C:\apps\xlwt\Worksheet.py", line 1034, in insert_bitmap
bmp = Bitmap.ImDataBmpRecord(filename)
File "C:\apps\xlwt\Bitmap.py", line 255, in __init__
self.width, self.height, self.size, data = _process_bitmap(filename)
File "C:\apps\xlwt\Bitmap.py", line 195, in _process_bitmap
fh = file(bitmap, "rb")
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 578, in __init__
raise IOError(errno.EACCES, 'file not accessible', filename)
IOError: [Errno 13] file not accessible: 'images/logo.gif'

Код:

  class MainHandler(webapp.RequestHandler):        
     def get(self):
        wb = Workbook()
        ws0 = wb.add_sheet('Sheet 1')
        ws0.write(0, 2, "chg wid: none")
        ws0.insert_bitmap('images/logo.gif', 2, 2)

        self.response.headers['Content-Type'] = 'application/ms-excel'
        self.response.headers['Content-Transfer-Encoding'] = 'Binary'
        self.response.headers['Content-disposition'] = 'attachment; filename="Sample.xls"'
        wb.save(self.response.out)

Пожалуйста, дайте мне знать, есть ли обходной путь для этого?

Ваше здоровье! ,
NN


person Nijin Narayanan    schedule 05.01.2012    source источник
comment
Пробовали ли вы читать «images/logo.gif» каким-либо другим способом (например, открывать его напрямую)? Отказ в доступе не похож на проблему xlwt, похоже, что у вас нет доступа к файлу. Возможно, insert_bitmap пытается открыть файл для записи, но это не то, что говорит трассировка rb.   -  person Dave    schedule 05.01.2012
comment
да. я могу получить к нему доступ через localhost:8081/images/logo.gif .   -  person Nijin Narayanan    schedule 05.01.2012
comment
Я не имел в виду через веб-браузер, я имел в виду, может ли ваша процедура MainHandler получить доступ к файлу? Вместо создания книги просто откройте файл logo.gif и прочитайте первый байт.   -  person Dave    schedule 05.01.2012


Ответы (2)


Похоже, что insert_bitmap() работает только с форматом bmp. Откройте свой gif-файл, сохраните копию в формате bmp и назовите его с помощью insert_bitmap('images/logo.bmp',2,2), это сработает.

person Exevior    schedule 29.03.2012

Я уверен, что этот проект давно закончен, но посмотрите xlsxwriter

http://xlsxwriter.readthedocs.org/en/latest/example_images.html

Он намного лучше вставляет изображения, чем xlwt, поддерживает файлы jpeg и png, а не только bmp.

если вам нужно сместить и масштабировать изображение в одной вставке:

worksheet.insert_image('B5', '/python/reports/garmentspreadsheet/Images/Garments/6702RD-WH.jpg', {'x_offset': 2, 'y_offset': 2, 'x_scale': 0,5, 'y_scale': 0,5})

смещения указаны в пикселях

Нет xlsxwriter

  • pip установить xlsxwriter

нет пипа? это как easy_install

  • центос/красная шляпа

    yum install python-pip или yum install pip

  • дебиан

    apt-get установить пункт

person teknowill    schedule 05.12.2014
comment
Большое примечание к этому ответу: xlsxwriter не может читать листы Excel, только создавать новые. Поэтому, если вы хотите вставить изображение в существующее, xlsxwriter не подходит. - person Hakaishin; 31.10.2017
comment
Вы можете читать данные xlsx с помощью openpyxl и numpy или других python-excel.org, а затем использовать xlsxwriter для создайте новый файл xlsx с новыми данными/изображениями, добавленными и объединенными где угодно. Часто я обнаруживал, что создание нового файла работает лучше, чем изменение, а xlsxwriter лучше всего подходит для изображений. stackoverflow.com/questions/4371163/ - person teknowill; 01.11.2017