openpyxl python 框线_对openpyxl范围内的所有单元格应用边框

该博客介绍了如何使用openpyxl库在Python中为Excel文件中的特定范围单元格批量添加边框。作者分享了两种方法,一种是逐个单元格设置边框,另一种是通过定义函数优化处理,提高了效率。同时,作者也提到现有代码并未实现期望的默认边框样式,并寻求解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I have a script that takes a pandas dataframe and chops it up into several hundred chunks and saves each chunk as a separate excel file. Each chunk will have the same number of columns but the number of rows varies. I've figured out how to apply all the other necessary formatting to these files with openpyxl, but I haven't yet determined the fastest way to apply borders. Also, I think I'm just not applying borders correctly, because the code below (which I suspect shouldn't need to loop over each cell individually) doesn't apply any borders.

from openpyxl.style import Border

wb = load_workbook(filename = _fname)

ws = wb.worksheets[0]

for _row in ws.range('A1:L'+str(ws.get_highest_row() ) ):

for _cell in _row:

_cell.style.borders.left.border_style = Border.BORDER_THIN

_cell.style.borders.right.border_style = Border.BORDER_THIN

_cell.style.borders.top.border_style = Border.BORDER_THIN

_cell.style.borders.bottom.border_style = Border.BORDER_THIN

wb.save(_fname)

So this code works, but it doesn't apply the border I expect (the default border in excel) and it takes a lot more steps than I'd prefer. My expectation is that I should be able to do something like this:

from openpyxl.style import Border

wb = load_workbook(filename = _fname)

ws = wb.worksheets[0]

_range = ws.some_range_func('A1:L'+str(ws.get_highest_row() ) ):

_range.style.borders.all_borders = Borders.BORDER_THIN

Does this functionality exist? If not, can someone please be so kind as to at least explain how to apply the default border style and not this slightly thicker border? None of Border.BORDER_THICK, Border.BORDER_MEDIUM, Border.BORDER_THIN, or Border.BORDER_HAIR seem correct.

Thanks!

解决方案

May be this is handy:

from openpyxl.reader.excel import load_workbook

from openpyxl.style import Border

def set_border(ws, cell_range):

rows = ws.range(cell_range)

for row in rows:

row[0].style.borders.left.border_style = Border.BORDER_THIN

row[-1].style.borders.right.border_style = Border.BORDER_THIN

for c in rows[0]:

c.style.borders.top.border_style = Border.BORDER_THIN

for c in rows[-1]:

c.style.borders.bottom.border_style = Border.BORDER_THIN

#usage example:

ws = load_workbook('example.xlsx').get_active_sheet()

set_broder(ws, "C3:H10")

It performs reasonably fast.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值