【发布时间】:2020-11-22 20:09:34
【问题描述】:
我在格式化空白单元格时遇到问题。 我的代码是
import setting_prices
import pandas as pd
from openpyxl import Workbook, load_workbook
from openpyxl.styles import Color, PatternFill, Font, Border
from openpyxl.styles.differential import DifferentialStyle
from openpyxl.formatting.rule import ColorScaleRule, CellIsRule, FormulaRule
import os
from datetime import datetime
def load_file_apply_format():
wb = load_workbook(filename)
writer = pd.ExcelWriter(filename, engine='openpyxl')
writer.book = wb
prices.to_excel(writer, sheet_name=today_as_str)
ws = wb[today_as_str]
redFill = PatternFill(start_color='EE1111',
end_color='EE1111',
fill_type='solid')
# whiteFill = PatternFill(start_color='FFFFFF',
# end_color='FFFFFF',
# fill_type='solid')
ws.conditional_formatting.add('B2:H99',
CellIsRule(operator='lessThan',
formula=['$I2'],
stopIfTrue=False, fill=redFill))
writer.save()
prices = setting_prices.df
today_as_str = datetime.strftime(datetime.now(), ' %d_%m_%y')
desktop_path = os.path.expanduser("~/Desktop")
filename = 'price_check.xlsx'
if os.path.exists(filename):
load_file_apply_format()
else:
prices.to_excel(filename, sheet_name=today_as_str)
load_file_apply_format()
我的公式工作得很好,但是 excel 将空白单元格视为 0,因此它们总是小于第一列,并格式化它们。我想跳过空白单元格,或者将它们格式化为看起来像普通单元格。
我已经尝试了论坛的几乎所有建议,但似乎无法解决。
请给我一些建议。
@Greg 使用答案:
ws.conditional_formatting.add('B2:H99',
CellIsRule(operator='between',
formula=['1', '$I2'],
stopIfTrue=False, fill=redFill))
导致将 == 的单元格格式化为我想避免的“I”列。如果 'I' 列中的单元格为空,'between' 也会为所有空白单元格设置格式。
例如:
productA 的所有单元格必须采用默认格式,因为它们等于“I”列中的单元格。
对于productB,唯一的格式化单元格必须是G3,因为它低于I3。
productC 的所有单元格必须采用默认格式,因为 I 中的单元格为空。
我认为,如果我将我的格式代码用于 lessThen,那么空白单元格的另一个公式就可以完成这项工作。但我无法让它工作。
【问题讨论】:
标签: python excel openpyxl conditional-formatting