Сравнение столбцов Excel с использованием Python и форматирование цвета - PullRequest
0 голосов
/ 11 мая 2018

У меня есть два столбца, содержащие значения 2017 и 2018 значений.Я хочу покрасить столбец, имеющий значения 2018, на основе сравнения со значениями 2017 года

  1. 2018 ячейки как КРАСНЫЙ, если значение ячейки 2018 <значение ячейки 2017 </li>
  2. 2018, как ЗЕЛЕНЫЙ, если значение ячейки 2018>Значение ячейки 2017
  3. 2018 как ячейка ORANGE, если значение ячейки 2018 = значение ячейки 2017

enter image description here

Я смог использоватьусловное форматирование, но для этого мне пришлось создать новый столбец, который сравнивал столбец A и столбец B

worksheet.write('C' + str(rownum + 1), np.where((float(data['2018 YTD'].values[0])>float(data['2017 YTD'].values[0])),2,np.where((float(data['2018 YTD'].values[0])>float(data['2017 YTD'].values[0])),0,1)), style)


worksheet.conditional_format('C2:C5',{'type': 'icon_set','icon_style': '3_arrows' })

Но с помощью этого кода мне пришлось создать еще один столбец (столбец C) здесь, вместо этого я хочу выделить столбец B непосредственно с помощью цветовых кодов.

Редактировать 1 ## Следуя совету Вальда:

ws = wb.active 

redFill = PatternFill(start_color='FFFF0000', end_color='FFFF0000', fill_type='solid') 
GreenFill = PatternFill(start_color='EE1111', end_color='EE1111', fill_type='solid') 

if(ws['B2']>ws['A2']):
  ws['B2'].fill=redFill 
else(ws['B2']<ws['A2']):
  ws['B2'].fill=GreenFill

wb.save("sample.xlsx") 

Но он выдал следующую ошибку:

TypeError: '>' not supported between instances of 'Cell' and 'Cell'

Кажется, в этом пакете> или <сравнение не поддерживается </p>

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

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

# First define some formats (taken directly from the docs: http://xlsxwriter.readthedocs.io/working_with_conditional_formats.html)
# Light red fill with dark red text.
red_format = workbook.add_format({'bg_color':   '#FFC7CE',
                                  'font_color': '#9C0006'})

# Light yellow fill with dark yellow text.
orange_format = workbook.add_format({'bg_color':   '#FFEB9C',
                                     'font_color': '#9C6500'})

# Green fill with dark green text.
green_format = workbook.add_format({'bg_color':   '#C6EFCE',
                                    'font_color': '#006100'})


# Red
worksheet.conditional_format('C2:C5', {'type':'formula',
                                       'criteria':'=C2<B2',
                                       'format':red_format})

# Orange
worksheet.conditional_format('C2:C5', {'type':'formula',
                                       'criteria':'=C2=B2',
                                       'format':orange_format})

# Green
worksheet.conditional_format('C2:C5', {'type':'formula',
                                       'criteria':'=C2>B2',
                                       'format':green_format})

Вы создаете три из них, один для зеленого, один для оранжевого и один для красногото есть, как именно вы это сделаете в Excel.

0 голосов
/ 11 мая 2018

Найдена эта библиотека в Интернете и протестирована эта битность, которая работает, как и ожидалось, без какой-либо логики для разных цветов.

from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import PatternFill

wb = load_workbook("sample.xlsx")

ws = wb.active

redFill = PatternFill(start_color='FFFF0000',
               end_color='FFFF0000',
               fill_type='solid')

ws['A2'].fill = redFill

wb.save("sample.xlsx")

enter image description here

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ

Для того, чтобысравните значения, которые вам нужны, чтобы использовать значение в ячейке, а не в фактической ячейке.

Попробуйте if ws['B2'].value > ws['A2'].value:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...