Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get Excel cell properties in Python

Tags:

python

xlrd

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?

like image 260
user1182090 Avatar asked Sep 22 '12 05:09

user1182090


People also ask

How do you take a value from a specific cell in Excel using Python?

Program to read cell value using openpyxl Library in PythonStep1: Import the openpyxl library to the Python program. Step2: Load/Connect the Excel workbook to the program. Step3: Get the title of the default first worksheet of the Workbook. Step4: Create variables and initialize them with the cell names.


1 Answers

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).

like image 103
Warren Weckesser Avatar answered Sep 22 '22 00:09

Warren Weckesser