正如您在上图中看到的,填充颜色的单元格没有网格边框。要恢复我使用的网格(在 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
是空的。我尝试了类似的代码,在评估范围时都失败了
如果您想使用 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')