比较两个 excel 时,如果绿色则设置状态为通过,否则失败

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

我想根据单元格颜色在我的 Excel 中附加一列(状态)。

如果该行的所有单元格都是绿色的,那么状态应该是通过否则失败。

我正在使用下面的代码

import pandas as pd

from openpyxl import load_workbook

filename = "Excel_Diff.xlsx"

wb = load_workbook(filename)

sheet_name = "Sheet1"

ws = wb[sheet_name]

data = ws.values

columns = next(data)[1:]

df = pd.DataFrame(data, columns=columns)

status_column = []

for row in ws.iter_rows(values_only=True):

    green = all(cell.fill.fgColor.rgb == "FF00FF00" for cell in row)
    
    status_column.append("pass" if green else "fail")

df["status"] = status_column

但这不起作用。

python pandas openpyxl
1个回答
0
投票

你的代码几乎是正确的。但是,您正在使用

ws.iter_rows(values_only=True)
values_only
参数设置为
True
时,将只返回单元格值,而不是单元格对象。这意味着您无法访问单元格属性,例如填充颜色。

您应该使用没有

ws.iter_rows()
values_only=True
来获取单元格对象:

import pandas as pd
from openpyxl import load_workbook

filename = "Excel_Diff.xlsx"
wb = load_workbook(filename)
sheet_name = "Sheet1"
ws = wb[sheet_name]

data = ws.values
columns = next(data)[1:]
df = pd.DataFrame(data, columns=columns)

status_column = []

for row in ws.iter_rows():  # remove values_only=True
    green = all(cell.fill.start_color.index == "FF00FF00" for cell in row)
    status_column.append("pass" if green else "fail")

df["status"] = status_column

这将根据一行中的所有单元格是否为绿色,将状态列附加到您的 DataFrame。

但是,请注意此代码检查是否一行中的所有单元格都是绿色的。如果要检查特定列或列的子集,则需要在

all()
函数内调整行迭代和条件。

另请注意,确切的颜色字符串(如“FF00FF00”)有时会因 Excel 中颜色的设置方式而异,因此请务必根据需要调整颜色字符串。

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