我可以使用条件格式来设置单元格背景颜色,但我希望根据一个单元格文本值设置整行背景。
例如:
import pandas as pd
import numpy as np
import xlsxwriter
import os
def main():
xlsfilename = os.path.expanduser("~") + "/test.xls"
writer = pd.ExcelWriter(xlsfilename,engine='xlsxwriter')
create_sheet(writer)
set_format(writer)
writer.save()
return
def create_sheet(writer):
index = np.arange(1)
df = pd.DataFrame(columns=["Col1","Col2","Col3"],index=index)
index = 0
df.ix[index] = ["completed","(1,2)","(1,3)"]
index += 1
df.ix[index] = ["pending","(2,2)","(2,3)"]
index += 1
df.ix[index] = ["discard","(3,2)","(3,3)"]
index += 1
df.to_excel(writer,sheet_name="MySheet",index=False)
return
def set_format(writer):
# Get the xlsxwriter objects from the dataframe writer object.
workbook = writer.book
worksheets = writer.sheets
completed_fmt = workbook.add_format({
'bold': False,
'border': 6,
'align': 'center',
'valign': 'vcenter',
'bg_color': '#D7E4BC',
})
for item in worksheets:
print item
worksheet = worksheets[item]
# Adjust the column width.
worksheet.set_column('A:A',10)
worksheet.set_column('B:B',10)
worksheet.set_column('C:C',10)
worksheet.data_validation('A1', {'validate': 'list',
'source': ['completed', 'pending', 'discard']})
worksheet.conditional_format('A1:A1000', {'type': 'text',
'criteria': 'begins with',
'value': 'completed',
'format': completed_fmt})
workbook.close()
return
#-----------------------------------------#
if __name__ == "__main__":
main()
#-----------------------------------------#
当前代码仅在单元格为“已完成”文本时设置背景。但我希望如果单元格A文本“完成”,则将A,B,C背景颜色设置为相同的值。
当前输出为:
答案 0 :(得分:3)
只需更改条件格式以包含整个范围,然后使用'formula'
类型而不是'text'
。
worksheet.conditional_format('A1:C1000', {'type': 'formula',
'criteria': '=LEFT($A1, 9)="completed"',
'format': completed_fmt})
答案 1 :(得分:0)
这不应该是excel-context条件,条件应该在整个范围内。
因此,通过在函数之前创建实际数据框(df
中的create_sheet
),而不是create_sheet
中的实际数据框。{/ p>
当您拥有新set_format
(其中df
作为参数)中的数据时,您可以在python上下文中而不是在excel上下文中执行该条件并应用正确的格式。