Как создать оператор «если и» для условного форматирования столбца ячеек с использованием xlsxwriter в Python - PullRequest
1 голос
/ 26 апреля 2020

Это не работает (очевидно), поэтому мне интересно, есть ли какие-либо предложения. Спасибо.

Цели: - Если AA2> 0 и AB2 <0, то отформатируйте ячейки в столбце A с formatc3. - Если AA2 <0 и AB2> 0, то отформатируйте ячейки в столбце A в формате c3.

worksheet.conditional_format('A2:A2100', {'type':   'formula',
                                        'criteria': '=AND($AA2>0,$AB2<0)',
                                        'format':   formatc3})

worksheet.conditional_format('A2:A2100', {'type':   'formula',
                                        'criteria': '=AND($AA2<0,$AB2>0)',
                                        'format':   formatc3})

1 Ответ

1 голос
/ 26 апреля 2020

Вы почти правильно поняли, вы упускаете одну небольшую вещь в формуле Excel, они должны начинаться с первого ряда, а не со второго. Также не нужно писать два разных утверждения, поскольку ваши условия могут быть вложены только в одно, это более эффективно и читабельно. В общем, попробуйте воспроизвести желаемый результат вручную в Excel, тогда его легко преобразовать в синтаксис xlsxwriter.

Вот рабочий пример:

import pandas as pd
import numpy as np

data = {'Col1': [2, 3, -2, 5],
        'Col2': [-5, 6, 7, -8],
        'Col3': [np.nan, np.nan, np.nan, np.nan]}

df = pd.DataFrame(data)

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']

green = workbook.add_format({'bg_color': '#C6EFCE'})

worksheet.conditional_format('C1:C1048576', {'type': 'formula',
                            'criteria': '=OR(AND($A1>0,$B1<0),AND($A1<0,$B1>0))',
                            'format': green})

writer.save()

Вывод:

enter image description here

...