【问题标题】:Openpyxl Border line breaks on intersection with another border lineOpenpyxl边界线在与另一条边界线相交时中断
【发布时间】:2017-01-10 16:33:09
【问题描述】:

我正在尝试使用 python 的第三方 excel 包 openpyxl 创建一个表格来将数据制成表格。 代码的第一个 for 语句从单元格 'A5' 到单元格 'E5' 绘制一条行, 第二个 for 语句从单元格 'A6' 到单元格 'E6' 绘制另一行线 第三个 for 语句从单元格“C5”到单元格“C9”绘制列线 第四个 for 语句从单元格 'F5 到单元格 'F9' 绘制另一列

但是,从单元格“C5”到“C9”绘制的列边框似乎刚刚中断 当它与从单元格“A5”到“E5”和“A6”到“E6”的行线相交时,以及 从“C7”而不是“C5”开始绘制。

虽然从单元格 'F5':'F9' 绘制的列边界线工作得非常好。 (我会发布一张正在创建的桌子的图片,但我的声誉不到 10) 我有什么地方做错了吗?

from openpyxl import Workbook
from openpyxl.styles import Border, Side
wb = Workbook()
ws = wb.active
ws.sheet_view.showGridLines = False

column_border = Border(left=Side(style='thin'))
row_border = Border(top=Side(style='thin'))

for col in ws['C5:C9']:
    for cell in col:
        cell.border = column_border
for col in ws['F5:F9']:
    for cell in col:
        cell.border = column_border

for row in ws['A5:E5']:
    for cell in row:
        cell.border = row_border
for col in ws['A6:E6']:
    for cell in col:
        cell.border = row_border

wb.save('a.xlsx')

【问题讨论】:

    标签: python openpyxl


    【解决方案1】:

    问题是您正在覆盖它们相交的那些单元格的 Border 对象。您的前两个循环将单元格的边框对象设置为左侧的细线。接下来的两个循环将单元格的边框对象设置为顶部的细线 - 但这摆脱了创建顶部线条的原始边框对象。

    我建议做的是创建两个方法来添加边框对象。这些方法将检查边界是否已经存在。如果是这样,它将增加而不是取代它。然后在循环中调用这些方法,而不是直接赋值。

    此代码可能有效,也可能无效,我当前的系统没有安装 OpenPyXL,我需要管理员权限才能安装它。

    def add_row_boarder(row_cell):
        if row_cell.border = None:
            row_cell.border = row_border
        else:
            row_cell.border.top = Side(style='thin')
        return row_cell
    
    def add_col_boarder(col_cell):
        if col_cell.border = None:
            col_cell.border = col_border
        else:
            col_cell.border.left = Side(style='thin')
        return col_cel
    

    【讨论】:

      【解决方案2】:

      正如 Rob 所说,您正在覆盖某些单元格的边框。 documentation 提供了格式化一系列单元格的通用方法,但基本上你可以组合样式,所以 cell.border = cell.border + row_border

      【讨论】:

        猜你喜欢
        • 2015-07-13
        • 1970-01-01
        • 1970-01-01
        • 2015-03-17
        • 1970-01-01
        • 1970-01-01
        • 2019-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多