openpyxl: есть ли способ поиска в таблице Excel ячеек с определенным цветом заливки? - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь прочитать файл «.xlsx», состоящий из таблицы, в которой есть несколько ячеек с цветовой заливкой (цвет фона ячейки).

Используя «Python 3.4» и «openpyxl 2.5.12», я попытался создать фиктивную заливку желтой ячейки на «a1» и сохранил файл, открывая файл «xlsx», я вижу, что он желтыйподсвечен.Однако, когда я перебираю ячейки электронной таблицы с условием:

if cell.fill == yellowFill:
    print(cell.value)

, я получаю только значение «a1», зная, что есть другие ячейки с такой же желтой заливкой.

Я даже пытался перейти в цветовую палитру Excel, чтобы сравнить цветовой код заполнения фиктивной ячейки «a1» и других выделенных желтым цветом ячеек, это было то же самое (красный: 255, зеленый: 255, синий: 0) !!!

from openpyxl import load_workbook
from openpyxl.styles import PatternFill, colors, Fill

p = 'some_directory\example.xlsx'
wb = load_workbook(p)
ws = wb['Sheet1']

yellowFill = PatternFill(start_color = colors.YELLOW,
                     end_color = colors.YELLOW,
                fill_type='solid')

ws['a1'].fill = yellowFill
wb.save(p)

for row in ws.rows:
    for cell in row:
        if cell.fill == yellowFill:
            print(cell.value)

Есть ли способ распечатать только значения ячеек с желтой заливкой?

Обновление: я попытался посмотреть на разницу между фиктивной подсвеченной ячейкойи первоначально выделенная ячейка:

print(ws['a1'].value)
print(ws['a1'].fill)
print()
print(ws['e5'].value)
print(ws['e5'].fill)

И получил следующий вывод:

>>> 
1
<openpyxl.styles.fills.PatternFill object>
Parameters:
patternType='solid', fgColor=<openpyxl.styles.colors.Color object>
Parameters:
auto=None, type='rgb', indexed=None, tint=0.0, rgb='00FFFF00', theme=None, 
bgColor=<openpyxl.styles.colors.Color object>
Parameters:
auto=None, type='rgb', indexed=None, tint=0.0, rgb='00FFFF00', theme=None

4
<openpyxl.styles.fills.PatternFill object>
Parameters:
patternType='solid', fgColor=<openpyxl.styles.colors.Color object>
Parameters:
auto=None, type='rgb', indexed=None, tint=0.0, rgb='FFFFFF00', theme=None, 
bgColor=<openpyxl.styles.colors.Color object>
Parameters:
auto=None, type='indexed', indexed=64, tint=0.0, rgb=None, theme=None
>>>    

Большое спасибо заранее!

1 Ответ

0 голосов
/ 27 декабря 2018

По запросу в комментариях:

Попробуйте с:

cell.fill.fgColor.rgb == '00FFFF00'
...