9

Actually I am using xlrd module 0.8 version, but I don't know how to read cell properties like background color, font, and whether cell is locked.

I tried to use

import xlrd
wb = xlrd.open_workbook(...)
sh = wb.sheet_by_index(...)
sh.sh._cell_xf_indexes(2, 2)

It raises an error saying formatting information needs to be set while reading wb, but if I had that parameter then it shows it is still not implemented.

Is there another module or how can this module itself be made to read cell properties?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
user1182090
  • 301
  • 4
  • 7
  • 20

1 Answers1

15

The following works for me, using xlrd version 0.7.6:

from xlrd import open_workbook

wb = open_workbook('tmp.xls', formatting_info=True)
sheet = wb.sheet_by_name("1")
cell = sheet.cell(6, 0)
print "cell.xf_index is", cell.xf_index
fmt = wb.xf_list[cell.xf_index]
print "type(fmt) is", type(fmt)
print
print "fmt.dump():"
fmt.dump()

fmt is an instance of the XF class; see https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html#formatting.XF-class

The dump() method prints all the information about the format. Here's the output of the above code:

cell.xf_index is 497
type(fmt) is <class 'xlrd.formatting.XF'>

fmt.dump():
_alignment_flag: 1
_background_flag: 1
_border_flag: 1
_font_flag: 1
_format_flag: 0
_protection_flag: 0
alignment (XFAlignment object):
    hor_align: 1
    indent_level: 0
    rotation: 0
    shrink_to_fit: 0
    text_direction: 0
    text_wrapped: 0
    vert_align: 2
background (XFBackground object):
    background_colour_index: 64
    fill_pattern: 1
    pattern_colour_index: 17
border (XFBorder object):
    bottom_colour_index: 0
    bottom_line_style: 0
    diag_colour_index: 0
    diag_down: 0
    diag_line_style: 0
    diag_up: 0
    left_colour_index: 0
    left_line_style: 0
    right_colour_index: 0
    right_line_style: 0
    top_colour_index: 56
    top_line_style: 1
font_index: 72
format_key: 0
is_style: 0
lotus_123_prefix: 0
parent_style_index: 0
protection (XFProtection object):
    cell_locked: 1
    formula_hidden: 0
xf_index: 497

Some of those values are indices into lists on the workbook wb. For example, fmt.font_index is 72, and wb.font_list[72] is an instance of the Font class (https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html#formatting.Font-class).

Warren Weckesser
  • 110,654
  • 19
  • 194
  • 214