颜色不同的单元格具有相同的bgColor值

时间:2019-08-21 16:38:35

标签: python openpyxl

我有一些电子表格,它们基本上是表格,可以打印出来,由制造人员用笔写出来,然后数字化以进行分析。我正在使用openpyxl编写脚本,该脚本收集数字化数据以进行分析。当前,唯一的分析是“实际上多久填充一次此框,而不是空白?”。

这些表格可能会随着我们的制造流程/要求/其他变更而更改,因此每次更改表格时都要更改脚本需要很多工作。我们生产的每个零件的形式都不同。

我认为一种简单的解决方案是要求电子表格在所有不打算写入的单元格中都具有颜色,以便脚本可以挑选出所有白色单元格以收集其数据。

但是,据我所知,这些工具在识别细胞颜色方面似乎做得并不出色。下图是工作表的外观(无文字)

Text-free sample spreadsheet

我的代码:

wb = load_workbook( 'template.xlsx' )
ws = wb.active

print( "A4 bgColor" )
print( ws['A4'].fill.bgColor )
print( "" )

print( "E7 bgColor" )
print( ws['E7'].fill.bgColor )
print( "" )

print( "E8 bgColor" )
print( ws['E8'].fill.bgColor )
print( "" )

print( "F7 bgColor" )
print( ws['F7'].fill.bgColor )
print( "" )

print( "A28 bgColor" )
print( ws['A28'].fill.bgColor )
print( "" )

输出:

A4 bgColor
<openpyxl.styles.colors.Color object>
Parameters:
rgb=None, indexed=64, auto=None, theme=None, tint=0.0, type='indexed'

E7 bgColor
<openpyxl.styles.colors.Color object>
Parameters:
rgb='00000000', indexed=None, auto=None, theme=None, tint=0.0, type='rgb'

E8 bgColor
<openpyxl.styles.colors.Color object>
Parameters:
rgb=None, indexed=64, auto=None, theme=None, tint=0.0, type='indexed'

F7 bgColor
<openpyxl.styles.colors.Color object>
Parameters:
rgb='00000000', indexed=None, auto=None, theme=None, tint=0.0, type='rgb'

A28 bgColor
<openpyxl.styles.colors.Color object>
Parameters:
rgb=None, indexed=64, auto=None, theme=None, tint=0.0, type='indexed'

使用我认为MS Excel中的主题颜色,将A4和A28设置为某种形式的灰色。具体来说,Gray, Accent 3, Lighter 60%。 E7和F7设置为No Fill,E8设置为White, Background 1

问题在于,单元格A4和E8报告其颜色之间没有差异。他们俩都使用颜色索引64,据我所知,这不是一件真正的事情。即使是这样,相同的索引也表示两种不同的颜色,那能给出什么呢?

我宁愿不要求单元格专门为No Fill,因为它要求任何对这些工作表进行更改的人都必须知道White!= White。


编辑:

一个建议让我更加仔细地研究了整个fill对象,我发现fgColor的作用有些不同。使用fgColor的新输出:

A4 fgColor
<openpyxl.styles.colors.Color object>
Parameters:
rgb=None, indexed=None, auto=None, theme=6, tint=0.5999938962981048, type='theme'

E7 fgColor
<openpyxl.styles.colors.Color object>
Parameters:
rgb='00000000', indexed=None, auto=None, theme=None, tint=0.0, type='rgb'

E8 fgColor
<openpyxl.styles.colors.Color object>
Parameters:
rgb=None, indexed=None, auto=None, theme=0, tint=0.0, type='theme'

F7 fgColor
<openpyxl.styles.colors.Color object>
Parameters:
rgb='00000000', indexed=None, auto=None, theme=None, tint=0.0, type='rgb'

A28 fgColor
<openpyxl.styles.colors.Color object>
Parameters:
rgb=None, indexed=None, auto=None, theme=6, tint=0.5999938962981048, type='theme'

theme=6对应于所选颜色位于颜色选择器第七列,而tint=0.59999...对应于上面提到的“浅60%”。

我应该看的是前景,而不是背景。

0 个答案:

没有答案