ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-xlsxwriter条件格式整行

2019-11-20 19:55:57  阅读:621  来源: 互联网

标签:xlsxwriter python


我可以使用条件格式来设置单元格背景颜色,但是我希望根据一个单元格文本值设置整行背景.

例如:

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背景色设置为相同的值.

当前输出为:

解决方法:

只需将您的条件格式更改为包括整个范围,然后使用“公式”类型而不是“文本”即可.

worksheet.conditional_format('A1:C1000', {'type': 'formula',
                                          'criteria': '=LEFT($A1, 9)="completed"',
                                          'format': completed_fmt})

enter image description here

标签:xlsxwriter,python
来源: https://codeday.me/bug/20191120/2046601.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有