gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:15:27 27 4
gpt4 key购买 nike

我正在使用 python 2.7.10 和 openpyxl 2.3.2,我是 Python 新手。

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

AttributeError: 'Cell' object has no attribute 'styles'.

如何为单元格添加边框?如有任何见解,我们将不胜感激。

我当前的代码:

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(不是 styles)和 border(不是 borders)。另外,要更改边框,您应该直接设置 cell.border

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

def set_border(ws, cell_range):
rows = ws[cell_range]
side = Side(border_style='thin', color="FF000000")

rows = list(rows) # we convert iterator to list for simplicity, but it's not memory efficient solution
max_y = len(rows) - 1 # index of the last row
for pos_y, cells in enumerate(rows):
max_x = len(cells) - 1 # index of the last cell
for pos_x, cell in enumerate(cells):
border = Border(
left=cell.border.left,
right=cell.border.right,
top=cell.border.top,
bottom=cell.border.bottom
)
if pos_x == 0:
border.left = side
if pos_x == max_x:
border.right = side
if pos_y == 0:
border.top = side
if pos_y == max_y:
border.bottom = side

# set new border only if it's one of the edge cells
if pos_x == 0 or pos_x == max_x or pos_y == 0 or pos_y == max_y:
cell.border = border

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com