python - 使用 openpyxl 将边框应用于范围内的所有单元格

标签 python excel openpyxl

我有一个脚本,它接受一个 pandas 数据框并将其分成数百个 block ,并将每个 block 保存为一个单独的 excel 文件。每个 block 将具有相同数量的列,但行数不同。我已经想出如何使用 openpyxl 将所有其他必要的格式应用到这些文件,但我还没有确定应用边框的最快方法。另外,我认为我只是没有正确应用边框,因为下面的代码(我怀疑它不需要单独遍历每个单元格)没有应用任何边框。

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)

所以这段代码有效,但它没有应用我期望的边框(excel 中的默认边框),而且它比我希望的要花费更多的步骤。我的期望是我应该能够做这样的事情:

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

此功能是否存在?如果没有,有人可以至少解释一下如何应用默认边框样式而不是这个稍粗的边框吗? Border.BORDER_THICK、Border.BORDER_MEDIUM、Border.BORDER_THIN 或 Border.BORDER_HAIR 似乎都不正确。

谢谢!

最佳答案

在 openpyxl==3.0.5 中以更 pythonic 的方式:

from openpyxl.styles import Border, Side

def set_border(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(worksheet, 'A5:C10') 

关于python - 使用 openpyxl 将边框应用于范围内的所有单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13650059/

相关文章:

Python 3.4 - Pandas - 帮助正确排列数据框列和删除无效列

python - 如何在悬停时注释broken_barh图表?

python - 如何检查单元格是否包含值

python - 将列表字典写入Excel Openpyxl

python - 使用具有背景填充的单元格将列添加到列表

python - 运行 Telegram 机器人时出错 "CallbackContext"

python - 在 Altair 图中绘制中位数和平均值

vba - 如何修改Excel VBA、用户窗体中的日期格式

excel - 如果 cell.value A = x,则 cell.value N = 公式

python - 如何在 python openpyxl 中从左到右交换组合图表的 y 轴?