使用use_iterators = True在OpenPyxl中进行格式化

时间:2013-08-26 14:13:52

标签: python openpyxl

这与我之前的问题类似getting formating data in openpyxl唯一真正的区别是现在我真的想使用优化的工作簿来提高速度。

基本上,当我使用优化的阅读器时,我无法弄清楚如何检索格式化细节。这是一个玩具样本,评论解释了我在打印陈述中看到的内容。难道我做错了什么?有没有更好的方法来检索格式详细信息?

此外,如果有人知道支持xlsx +检索格式的python的不同excel阅读器,我愿意改变! (我已经尝试过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

1 个答案:

答案 0 :(得分:0)

style_ID似乎是您可以在工作簿中找到样式信息的索引 - > shared_styles(book.shared_styles或sheet.parent.shared_styles)。

在一些工作簿中,这完美无缺;但是,我也发现在其他工作簿中,style_ID大于shared_styles的长度,当我尝试访问所述样式时,会给出“超出范围”的异常。