Python 使用Openpyxl将边框应用于单元格范围
我正在使用python 2.7.10和OpenPYXL2.3.2,我是python新手 我正在尝试将边框应用于Excel工作表中指定范围的单元格(例如,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_
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()