使用xlsxwriter和熊猫创建重叠的寄宿生颜色

问题描述

给出以下数据:

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","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],"format": workbook.add_format(
                {
                    "left": 2,)

但是格式不正确(或不符合要求),并且显示为:

enter image description here

不正确的部分是:

enter image description here

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

这个问题可能会从创建重叠的边界过渡到创建重叠的条件格式,这一点很普遍,我对xlsxwriter并不十分了解。

解决方法

我发现了解决方法,原因似乎是一个错误,我不是该模块的作者。

这个想法是不要让细胞重叠。我将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","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',"format": workbook.add_format(
                {
                    "right": 2,"bottom": 2,)

    worksheet.conditional_format(
        'D4:F4',)
    # create vertical line

    worksheet.conditional_format(
        'D1:D3',"format": workbook.add_format(
                {
                    "left": 2,)

    worksheet.conditional_format(
        'D5:D10',)