我想根据单元格颜色在我的 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
但这不起作用。
你的代码几乎是正确的。但是,您正在使用
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 中颜色的设置方式而异,因此请务必根据需要调整颜色字符串。