Excel条件格式规则Openpyxl或Pandas

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

我正在尝试使用 openpyxl 或 Pandas 为单元格创建条件格式规则。
我要写入Excel文件的规则是:如果单元格的值小于1,则将其格式化为%,如果大于1,则将其格式化为数字。
到目前为止我所有的尝试都没有成功。

worksheet.conditional_formatting.add(cell, CellIsRule(operator='lessThan', formula=['1'], stopIfTrue=True, format='0.0%'))

cell = pd.DataFrame(worksheet.conditional_format(cell,{'format':'0.00%}))
pandas openpyxl conditional-formatting
1个回答
0
投票

我认为为此你需要两个 CF 规则,一个用于小于 1 的值,另一个用于值 1 及更大。
另外考虑到格式要求,请使用 DifferentialStyle。

以下代码示例将向新工作簿中的新工作表添加两个值; A1=0.4 A2=1.4 然后将两个 CF 规则应用到指定的范围 A1:A2。

from openpyxl import Workbook
from openpyxl.formatting.rule import CellIsRule
from openpyxl.styles.differential import DifferentialStyle
from openpyxl.styles.numbers import NumberFormat


wb = Workbook()
ws = wb.active

ws['A1'].value = 0.4
ws['A2'].value = 1.4

p_number_format = NumberFormat(10, '0.00%')
rule1 = CellIsRule(operator='lessThan', formula=[1], stopIfTrue=True)
rule1.dxf = DifferentialStyle(numFmt=p_number_format)

n_number_format = NumberFormat(2, '0.00')
rule2 = CellIsRule(operator='lessThan', formula=[1], stopIfTrue=True)
rule2.dxf = DifferentialStyle(numFmt=n_number_format)

ws.conditional_formatting.add('A1:A2', rule1)
ws.conditional_formatting.add('A1:A2', rule2)

wb.save("cf_test.xlsx")

输出示例

然后,如果您要更改任一单元格的值,使其值小于 1,则该值将显示为百分比,如果 1 或更大,则显示为数字

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