У меня есть файл .xlsx, который имеет 3 столбца.

id   name  age
1    jon    10       #jon cell is red
2    bob    54       #bob cell is red
3    rob    77  
4    sal    22       #sal cell is red
5    wil    47
6    nia    32

В моем column 'name' jon ,bob, sal cell are red colored остальные ячейки столбца 'name' окрашены в зеленый цвет.

Я хочу найти количество red colored cells т.е. в этом случае 3.

Это только пример, у меня есть файлы .xlsx, которые имеют более 1000 строк, и было бы очень трудно вручную подсчитать ячейки красного цвета.

Я попробовал это, используя openpyxl и xlrd, но не мог найти много

Любые предложения будут оценены, спасибо заранее

0
Shubham R 24 Апр 2017 в 15:54

2 ответа

Лучший ответ

Я посмотрел здесь

Сначала нам нужно загрузить рабочую книгу, а затем работать с выбранным листом из этой рабочей книги, для этого мы делаем следующее:

import openpyxl as px

#Loading the workbook into python
wb = px.load_workbook('FileName.xlsx')

#Selecting Active Sheet
sheet = wb.get_sheet_by_name('Sheet1')

Второй ответ (в ссылке) оказался весьма полезным - можно получить HEX-код цвета ячейки, обратившись к цвету index, выполнив следующие действия:

i = sheet['A1'].fill.start_color.index #Grabbing colour at [A1]
index_colours = px.styles.colors.COLOR_INDEX
result = str(index_colours [i])

result= "#"+result[2:]

print result
#>>>#HEXCODE

Вы можете использовать это и добавить все коды в список после прочтения файла Excel, например:

colour_list = []
index_colours = px.styles.colors.COLOR_INDEX
for row in range(1,all_rows):

    i = sheet['B' + str(row)].fill.start_color.index
    result = str(index_colours [i])
    result= "#"+result[2:]
    colour_list.append(result)

И считать HEX коды, относящиеся к Red

red = '#FF0000'
print colour_list.count(red)
#>>> 3
0
Community 23 Май 2017 в 12:25

Вот решение для файлов xlsx с использованием библиотеки openpyxl. A2 - это ячейка, цветовой код которой нам нужно выяснить.

import openpyxl
from openpyxl import load_workbook
excel_file = 'color_codes.xlsx' 
wb = load_workbook(excel_file, data_only = True)
sh = wb['Sheet1']
color_in_hex = sh['A2'].fill.start_color.index # this gives you Hexadecimal value of the color
print ('HEX =',color_in_hex) 
print('RGB =', tuple(int(color_in_hex[i:i+2], 16) for i in (0, 2, 4))) # Color in RGB
0
Sumit Pokhrel 21 Апр 2020 в 12:10