我目前正在学习Python,以便以自动方式创建excel文件。 但是我对 openpyxl 库的条件格式化部分遇到了一些麻烦。
以下是不起作用的代码:
import openpyxl as xl
wb = xl.Workbook()
ws = wb.active
red_color = "ffc7ce"
red_color_font = "9c0103"
red_font = xl.styles.fonts.Font(size=14, bold=True, color=red_color_font)
red_fill = xl.styles.fills.PatternFill(start_color=red_color, end_color=red_color, fill_type="solid")
#------
for i in range(3,131,1):
ws["B"+str(i)] = "=SUM(C{}:D{})".format(str(i),str(i))
ws["C"+str(i)] = 0
ws["D"+str(i)] = 0
ws["E"+str(i)] = "=SUM(F{}:G{})".format(str(i),str(i))
ws["F"+str(i)] = 0
ws["G"+str(i)] = 0
# conditional formating - putting red cells if second applications have been forgotten
if i==4:
threshold = [str(int(ws["B"+str(i-1)].value))]
ws.conditional_formatting.add("B4",xl.formatting.rule.CellIsRule(operator="lessThan",formula=threshold,fill=red_fill,font=red_font))
if i>=5:
threshold = [str(int(ws["B"+str(i-1)].value)-int(ws["B"+str(i-2)].value))]
ws.conditional_formatting.add("B{}".format(str(i)),xl.formatting.rule.CellIsRule(operator="lessThan",formula=threshold,fill=red_fill,font=red_font))
正如您所看到的,问题来自 threshold 变量。 当我运行代码时,我收到以下错误消息:
ValueError: invalid literal for int() with base 10: '=SUM(C3:D3)'
有人知道如何从用于B列的公式中提取值吗?
提前感谢!
答案 0 :(得分:0)
这取决于是否打开了excel。在您的情况下,excel似乎是您从python生成的,因此excel中没有存储任何评估值。
您可以做什么:
A。由于您使用python生成代码,因此您知道将哪些值分配给了这些单元格。您无需从excel读取这些值。您可以创建一个数据框来存储结构,如果要查看C [3]的值,请调用df ['C']。iloc [3]
B。在尝试访问单元格的评估值之前,您需要打开excel并将其保存。这样,Mircosoft Excel将保存有关该单元格的公式和评估值的信息。然后,您可以在python代码中读回excel。更具体地说,您可以同时读取单元格的公式和值:
wb_values = load_workbook(path_xlsx+wb_name,data_only=True)
wb_formulas = load_workbook(path_xlsx+wb_name)