我使用python和pandas和xlsxwriter模块来格式化动态生成的excel文件。我需要某些行被涂成黄色,这取决于一列的内容。这是我的代码(“data”是一个数据帧,其中每行代表一个人)。请查找指向我所说的相关代码的#注释:
def format_excel(data):
writer = pd.ExcelWriter('InviteList.xlsx', engine='xlsxwriter')
data.style.to_excel(writer, sheet_name='Sheet1', startrow=1, header=False, index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# Styles
yellow = workbook.add_format({'bg_color': '#fdf2d0', 'border': 1, 'border_color': '#C0C0C0'})
# Hacky bypass of default header style that pandas imposes
for idx, val in enumerate(data.columns):
worksheet.write(0, idx, val)
# THIS IS THE RELEVANT CODE
for row, employee in data.iterrows():
if data.loc[row, 'rsvp'] == 'maybe':
worksheet.conditional_format(row + 1, 0, row + 1, 15, {'type': 'no_errors', 'format': yellow})
writer.save()
因此基本上for循环检查行是否在rsvp列中包含maybe,如果是,则在该行上使用黄色格式化对象。这很好,但是。。。你知道吗
假设第4行和第7行在我的excel表中被涂成黄色。现在,如果我选择一个列并按字母顺序或类似的方式对该列排序,黄色格式将保留在第4行和第7行中,而不是与需要保留的内容一起移动。你知道吗
因此,我的实现似乎用黄色格式永久地锁定了第4行和第7行,而我需要的是使它更具动态性:它应该与在“rsvp”列中包含“maybe”的行保持一致,无论我将它们移动到哪里。你知道吗
编辑:
好的,我用worksheet.set_row
而不是worksheet.conditional_format
修复了我的问题。但后来我遇到了一个问题,即颜色会与正确的行保持一致,而其他格式(如字体大小和文本换行)则不会,因此我还必须将它们包含在黄色格式对象的定义中。你知道吗
我想你不需要在结尾打圈。 假设您的“可能”条件在A列中,而您希望被着色为黄色的数据在B列中。 您只需编写不带循环的条件格式,如下所示:
相关问题 更多 >
编程相关推荐