I have tried to print some_cell.font.color.rgb
and got various results.
For some I got what I want (like "FF000000
"), but for others it gives me Value must be type 'basetring'
. I assume that the latter is because I haven't actually defined the font color for these cells.
I'm using openpyxl 2.2.2
I think this is a bug in openpyxl and I think you should report it here.
Debugging the following code (with trepan3k of course):
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
c = ws['A4'] # cell gets created here
print(ws['A4'].font.color)
I get:
Color(rgb=Value must be type 'str', indexed=Value must be type 'int', auto=Value must be type 'bool', theme=1, tint=0.0, type='theme')
and this is coming from _repr_() of class Typed() in file openpyxl/descriptors/base.py
. This message is given when a value hasn't been initialized. Notice that "indexed" and "auto" also haven't been set.
But these presumably should have been set when the code for the access of ws['a4']
was performed.
Note: the slight difference in message: 'str' instead of 'basestring' is probably attributable to the fact that I was using Python 3 or less likely openpyxl 2.2.3
And if there's some other additional code should that I should have added in my example, then at least https://openpyxl.readthedocs.org/en/latest/index.html should indicate that.
See also openpyxl cell style not reporting correctly where one of the developers seems to say the same thing in so many words.
Edit:
A couple of other things may be of interest to note. First, you can set a value and then read it, for example you can do this:
c.font.color.rgb = "FF000000"
Second, if you test c.font.color.rgb
in a boolean it will look like a value has been set. That is
if c.font.color: print("yes")
will print "yes".