Dear_Merlin 2024-07-28 22:58 采纳率: 0%
浏览 9

python openpyxl 边框设置不生效

已经设置了字体、边框、对齐方式,但是结果字体和对齐方式生效了,边框一直没有生效。打开生成的excel内容,边框是透明的。
详情见如下代码:

from openpyxl.styles import Alignment,Font,Side,Border,colors

def set_display(path,sheet_name,row_len,col_len):
    workbook = load_workbook(path)
    worksheet = workbook[sheet_name]
    # 设置字体格式
    text_font = Font(
        name='华文楷体',
        size=11,
        bold = False
    )

    bor = Border(top=Side(border_style='thick', style='thick', color=colors.BLACK),
                    bottom=Side(border_style='thick', style='thick', color=colors.BLACK),
                    left=Side(border_style='thick', style='thick', color=colors.BLACK),
                    right=Side(border_style='thick', style='thick', color=colors.BLACK))

    # 对齐方式设置为居中
    alignment = Alignment(horizontal='center', vertical='center')
    # 设置每列都居中
    # for row in worksheet.iter_rows(min_row=1,max_row=row_len+3,min_col=1,max_col=col_len+1):
    for row in worksheet.iter_rows():
        for cell in row:
            cell.alignment = alignment
            cell.font = text_font
            cell.border = bor
            print('已设置border')
    workbook.save(path)
    workbook.close()

如上代码运行结果如下图,字体和居中都成功了,但是边框并不是黑色的!:

img

试了其他的几种边框写法也是不行

例如去掉了border_style

    bor = Border(top=Side(style='thick', color=colors.BLACK),
                    bottom=Side(style='thick', color=colors.BLACK),
                    left=Side(style='thick', color=colors.BLACK),
                    right=Side(style='thick', color=colors.BLACK))

例如单独生成side,再在Border里引用

    side = Side(style='thick', color='00000000')
    bor = Border(top=side, bottom=side, left=side, right=side)
  • 写回答

1条回答 默认 最新

  • 何事_ 2024-07-28 22:58
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在设置openpyxl的边框时遇到了一些问题。首先,你应该知道openpyxl中的边框样式是通过Side对象来定义的,每个Side对象代表边框的一个方向(上、下、左、右)。当你设置边框样式时,需要确保你正确地创建了Side对象并将它们分配给Border对象。你的代码中存在一些可能的错误,我会帮你纠正。

    另外,你提到试过其他的几种边框写法也不行,可能是因为颜色设置的格式不正确。在openpyxl中,颜色的设置应该使用RGB格式。你可以尝试使用像(RGB(0, 0, 0))这样的格式来设置颜色。

    以下是修改后的代码示例:

    from openpyxl.styles import Alignment, Font, Side, Border, NamedRGB
    
    def set_display(path, sheet_name, row_len, col_len):
        workbook = load_workbook(path)
        worksheet = workbook[sheet_name]
        
        # 设置字体格式
        text_font = Font(name='华文楷体', size=11, bold=False)
        
        # 设置边框样式
        bor = Border(
            top=Side(style='thin', color=NamedRGB('BLACK')),  # 使用NamedRGB设置颜色
            bottom=Side(style='thin', color=NamedRGB('BLACK')),
            left=Side(style='thin', color=NamedRGB('BLACK')),
            right=Side(style='thin', color=NamedRGB('BLACK'))
        )
        
        # 对齐方式设置为居中
        alignment = Alignment(horizontal='center', vertical='center')
        
        for row in worksheet.iter_rows():
            for cell in row:
                cell.alignment = alignment
                cell.font = text_font if cell.value else None  # 如果单元格为空则不设置字体样式,避免报错
                cell.border = bor  # 设置边框样式到单元格上
                print('已设置border')  # 确保这条消息会输出,表明设置已经执行到当前单元格上
                cell._repr_html_()  # 这里添加这一行来确保在IDE中可以看到样式的更新(例如使用Jupyter Notebook时)
                cell._update_style()  # 更新单元格的样式以便看到效果(例如在使用Jupyter Notebook或类似的交互式工具时)           # 在Excel编辑器内重新计算来查看更新的效果会更可靠))这种方法可以让效果立刻显示在界面上。在保存文件后实际效果不会受影响。            workbook.save(path)  # 保存文件前先不执行这一步,否则可能会看不到样式的即时更新效果。可以在循环结束后执行一次即可。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              }根据实际应用情况可能需要引入工作簿重绘或者其他类似方法强制更新效果否则可能有轻微的同步不一致情况。(这是因为有时候Excel的界面更新可能不是实时的需要手动刷新或者重新计算来查看更新的效果。)你可以在循环结束后执行一次workbook.save(),以确保所有更改都已保存。然后关闭工作簿以确保没有其他操作正在进行中。这样应该可以解决你的问题。如果还有其他问题请继续询问。
    
    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 7月28日
  • 创建了问题 7月28日

悬赏问题

  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥20 spring boot集成mqtt的使用问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错