这是不工作的(显然),所以我想知道是否有任何建议。谢谢你的建议。
目标是 - 如果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})
你几乎做对了,你错过了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()
输出: