openpyxl 不设置边框

问题描述 投票:0回答:1

Text 正如您在上图中看到的,填充颜色的单元格没有网格边框。要恢复我使用的网格(在 stackoverflow 中找到):

def set_border(self, ws, cell_range):
        thin = Side(border_style="thin", color="000000")
        for row in ws[cell_range]:
            for cell in row:
                cell.border = Border(top=thin, left=thin, right=thin, bottom=thin)

set_border(self, sheet, "B6:AE4") 

它不起作用,因为

row
是空的。我尝试了类似的代码,在评估范围时都失败了

python openpyxl
1个回答
0
投票

如果您想使用 Openpyxl 设置边框,则必须逐个单元格设置边框,以便 @mrblue6 声明您可以在代码中使用 iter_rows 来迭代每个单元格以设置边框。

首先请注意,使用另一个模块(如 Xlwings)将允许您在一定范围内应用边框,如果您使用安装了 Excel 的 Windows,这可能是更好的方法。

此代码示例将使用 Xlwings 在“B4:AE6”范围内设置细边框。

import xlwings as xw

xlfile = 'foo.xlsx'

with xw.App(visible=False) as app:
    wb = xw.Book(xlfile)
    ws = wb.sheets['Sheet1']

    ws.range('B4:AE6').api.Borders.Weight = 1

    wb.save('foo_out.xlsx')

如果xlwings不适合您可以修改您的代码以设置范围的边框如下;

**注意;您应该使用前向范围,即在您的描述中,您指定了一个范围“B6:AE4”,其起始行大于结束行。应输入相同的范围“B4:AE6”,否则会出现错误。

from openpyxl import load_workbook
from openpyxl.styles import Border, Side
from openpyxl.worksheet.cell_range import CellRange

def set_border(ws, cell_range):
    thin = Side(border_style="thin", color="000000")

    rng = CellRange(cell_range)  # range to set borders
    for row in ws.iter_rows(min_row=rng.min_row,
                            min_col=rng.min_col,
                            max_col=rng.max_col,
                            max_row=rng.max_row
                            ):
        for cell in row:
            cell.border = Border(top=thin, left=thin, right=thin, bottom=thin)


filename = 'foo.xlsx'
wb = load_workbook(filename)
sheet = wb['Sheet1']

set_border(sheet, "B4:AE6")

wb.save('foo_out.xlsx')
© www.soinside.com 2019 - 2024. All rights reserved.