【问题标题】:Creating overlapping boarder colours with xlsxwriter and pandas使用 xlsxwriter 和 pandas 创建重叠的边框颜色
【发布时间】:2020-10-25 18:39:56
【问题描述】:

给定以下数据:

import pandas as pd
import numpy as np
# sample data
np.random.seed(1)
np.random.seed(1)
df = pd.DataFrame(
    np.random.randint(low=0, high=1000, size=(6, 5)),
    columns=["X", "a", "b", "c", "d"],
    index=["a", "b", "X", "d", "e", "X"],
)

我可以使用以下方法创建一个带有格式化边界的 xlsx 文件:

with pd.ExcelWriter("testing.xlsx") as writer:
    #  need to create xlsx output for this example
    sheet_name = "Sheet1"
    df.to_excel(writer, sheet_name=sheet_name)
    workbook = writer.book
    worksheet = writer.sheets[sheet_name]

    # create horizontal line
    row_range = (3, 3)
    col_range = (1, 8)
    worksheet.conditional_format(
        row_range[0],
        col_range[0],
        row_range[1],
        col_range[1],
        {
            "type": "no_errors",
            "format": workbook.add_format(
                {
                    "top": 2,
                    "border_color": "red",
                }
            ),
        },
    )
    # create vertical line
    row_range = (1, 9)
    col_range = (4, 4)
    worksheet.conditional_format(
        row_range[0],
        col_range[0],
        row_range[1],
        col_range[1],
        {
            "type": "no_errors",
            "format": workbook.add_format(
                {
                    "left": 2,
                    "border_color": "red",
                }
            ),
        },
    )

但是格式不正确(或不符合要求),看起来像:

不正确的部分是:

似乎我无法格式化单元格两次?这是一个问题。

这个问题可以概括为从创建重叠边界到创建重叠条件格式,我对 xlsxwriter 说得不够熟悉。

【问题讨论】:

    标签: python pandas formatting conditional-formatting xlsxwriter


    【解决方案1】:

    我找到了解决方法,因为它看起来像一个错误,而且我不是该模块的作者。

    这个想法是不要让单元格重叠。我将 2 个范围分成 5 个范围。位于十字路口的单元格有 2 个边框。

    import pandas as pd
    import numpy as np
    # sample data
    np.random.seed(1)
    np.random.seed(1)
    df = pd.DataFrame(
        np.random.randint(low=0, high=1000, size=(6, 5)),
        columns=["X", "a", "b", "c", "d"],
        index=["a", "b", "X", "d", "e", "X"],
    )
    
    with pd.ExcelWriter("C:\\Users\\kemot\\Desktop\\programy Python\\testing.xlsx") as writer:
        #  need to create xlsx output for this example
        sheet_name = "Sheet1"
        df.to_excel(writer, sheet_name=sheet_name)
        workbook = writer.book
        worksheet = writer.sheets[sheet_name]
    
     
       # create horizontal line
        worksheet.conditional_format(
            'A4:B4',
            {
                "type": "no_errors",
                "format": workbook.add_format(
                    {
                        "bottom": 2,
                        "border_color": "red",
                    }
                ),
            },
        )
    
        worksheet.conditional_format(
            'C4',
            {
                "type": "no_errors",
                "format": workbook.add_format(
                    {
                        "right": 2,
                        "bottom": 2,
                        "border_color": "red",
                    }
                ),
            },
        )
    
        worksheet.conditional_format(
            'D4:F4',
            {
                "type": "no_errors",
                "format": workbook.add_format(
                    {
                        "bottom": 2,
                        "border_color": "red",
                    }
                ),
            },
        )
        # create vertical line
    
        worksheet.conditional_format(
            'D1:D3',
            {
                "type": "no_errors",
                "format": workbook.add_format(
                    {
                        "left": 2,
                        "border_color": "red",
                    }
                ),
            },
        )
    
        worksheet.conditional_format(
            'D5:D10',
            {
                "type": "no_errors",
                "format": workbook.add_format(
                    {
                        "left": 2,
                        "border_color": "red",
                    }
                ),
            },
        )
    

    【讨论】:

    • 干杯,我想我需要一种方法来概括这一点,以便它成为一个解决方案。
    • 我认为这是一个错误。你有不同的意见吗?
    • 是的,这可能被认为是一个错误,但我不确定它是 excel 限制还是 xlsxwriter 限制(我不太了解)。一般来说,我的意思是如果有一个可以接收线并处理交叉点的函数会更好。
    猜你喜欢
    • 2016-07-14
    • 2015-12-10
    • 2015-04-01
    • 2011-08-25
    • 2011-05-05
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多