Python 使用Openpyxl将边框应用于单元格范围

Python 使用Openpyxl将边框应用于单元格范围,python,excel,openpyxl,Python,Excel,Openpyxl,我正在使用python 2.7.10和OpenPYXL2.3.2,我是python新手 我正在尝试将边框应用于Excel工作表中指定范围的单元格(例如,C3:H10)。我的以下尝试失败,并显示以下消息: AttributeError:“单元格”对象没有属性“样式” 如何将边框附着到单元格?如有任何见解,我们将不胜感激 我当前的代码: import openpyxl from openpyxl.styles import Border, Side def set_border(ws, cell_

我正在使用python 2.7.10和OpenPYXL2.3.2,我是python新手

我正在尝试将边框应用于Excel工作表中指定范围的单元格(例如,
C3:H10
)。我的以下尝试失败,并显示以下消息:

AttributeError:“单元格”对象没有属性“样式”

如何将边框附着到单元格?如有任何见解,我们将不胜感激

我当前的代码:

import openpyxl
from openpyxl.styles import Border, Side

def set_border(ws, cell_range):
    rows = ws.iter_rows(cell_range)
    for row in rows:
        row[0].styles.borders = Border(left=Side(border_style='thin', color="FF000000"))
        row[-1].styles.borders = Border(right=Side(border_style='thin', color="FF000000"))
    for c in rows[0]:
        c.styles.borders = Border(top=Side(border_style='thin', color="FF000000"))
    for c in rows[-1]:
        c.styles.borders = Border(bottom=Side(border_style='thin', color="FF000000"))


# Example call to set_border
wb = openpyxl.load_workbook('example.xlsx')
ws = wb.get_sheet_by_name('Sheet1')

set_border(ws, "B3:H10")

首先,所有属性都被称为
style
(不是
style
)和
border
(不是
borders
)。此外,若要更改边框,您应直接设置
单元格.border

除了边界逻辑存在一些问题外,由于迭代器和角点的存在,使其正常工作更为复杂。这是一个粗略的版本(尽可能简单,但内存效率不高):

可替换为:

border = cell.border.copy()

PS:您的回答帮助了我……

首先感谢您的回复。一旦我的声誉超过15,我的反馈将表明你的回答是有用的。其次,暂时忽略可能的逻辑问题,将属性名称更改为border(从borders)并直接设置cell.border(通过删除.styles)会产生TypeError:“generator”对象在第9行没有属性“getitem”(对于行[0]:)中的c)。您能就这意味着什么提供帮助吗?@PeteB
ws.iter\u行(单元格范围)
returns。您不能使用
row[N]
语法从生成器中获取
N
th项(这就是我在示例中将其转换为list的原因)。答案将覆盖任何现有边框,这样,如果您有较薄的内边框,则会创建一个删除了内边框的外边框。这是故意的吗?@toasteez我不知道你说的内边界和外边界是什么意思。我添加了一个修复程序,除了添加的边界外,其他边界都保持不变。检查它是否解决了您的问题。您是从哪里想到尝试使用“样式”的?在最新版本的openpyxl中,这会导致我收到数千行不推荐警告。
border = Border(
            left=cell.border.left,
            right=cell.border.right,
            top=cell.border.top,
            bottom=cell.border.bottom)
border = cell.border.copy()