Форматирование в OpenPyxl с использованием use_iterators = True

Это похоже на мой предыдущий вопрос получение данных форматирования в openpyxl. Единственная реальная разница в том, что теперь я действительно хочу использовать оптимизированную книгу для увеличения скорости.

В основном я не могу понять, как получить детали форматирования, когда я использую оптимизированный ридер. Вот образец игрушки, комментарии объясняют, что я вижу в операторах печати. Я делаю что-то неправильно? Есть ли лучший способ получить детали форматирования?

Кроме того, если кто-нибудь знает другую программу чтения excel для python, которая поддерживает форматирование xlsx +, я готов измениться! (Я уже пробовал xlrd, и хотя он поддерживает xlsx в более новых сборках, он еще не поддерживает форматирование)

from openpyxl import Workbook
from openpyxl.reader.excel import load_workbook
from openpyxl.style import Color, Fill
#this is all setup
wb = Workbook()
dest_filename = 'c:\\temp\\test.xlsx'

ws = wb.worksheets[0]

ws.title = 'test'

ws.cell('A1').value = 'foo'
ws.cell('A1').style.font.bold = True

ws.cell('B1').value = 'bar'
ws.cell('B1').style.fill.fill_type = Fill.FILL_SOLID
ws.cell('B1').style.fill.start_color.index = Color.YELLOW

wb.save(filename = dest_filename )
#setup complete    

book = load_workbook( filename = dest_filename, use_iterators = True )

sheet = book.get_sheet_by_name('test')

for row in sheet.iter_rows():
    for cell in row:
        print cell.coordinate
        print cell.internal_value 
        print cell.style_id #returns different numbers here (1, and 2 in case anyone is interested)
        print sheet.get_style(cell.coordinate).font.bold #returns False for both
        print sheet.get_style(cell.coordinate).fill.fill_type #returns none for bothe
        print sheet.get_style(cell.coordinate).fill.start_color.index #returns FFFFFFFF (white I believe) for both
        print

import openpyxl
print openpyxl.__version__ #returns 1.6.2

person Brad    schedule 26.08.2013    source источник


Ответы (1)


Style_ID, по-видимому, является индексом, где вы можете найти информацию о стиле в workbook -> shared_styles (book.shared_styles или sheet.parent.shared_styles).

В некоторых книгах это работает безупречно; но я также обнаружил, что в других книгах style_ID больше, чем длина shared_styles, что дает мне исключения «Вне диапазона», когда я пытаюсь получить доступ к указанным стилям.

person John Steel    schedule 24.07.2014