我如何在Python中使用xlsxwriter创建一个 "if and "语句来有条件地格式化一列单元格?

问题描述 投票:1回答:1

这是不工作的(显然),所以我想知道是否有任何建议。谢谢你的建议。

目标是 - 如果AA2 > 0和AB2 < 0,那么用formatc3格式化A列的单元格。- 如果AA2 < 0和AB2 > 0,那么用formatc3格式化A列中的单元格。

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})
python if-statement conditional-formatting xlsxwriter
1个回答
1
投票

你几乎做对了,你错过了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

© www.soinside.com 2019 - 2024. All rights reserved.