在OpenPyxl中为单元格添加边框
我正在尝试使用Openpyxl给一个单元格加边框,但我在最基本的“给任何单元格加任何类型的边框”这个任务上失败了。我试着从Openpyxl的文档中复制默认样式并进行修改,但结果是
TypeError:__init__() got an unexpected keyword argument 'superscript'
我还试着直接从另一个例子中复制代码(使用openpyxl给一系列单元格加边框),但那样也出现了
AttributeError: type object 'Border' has no attribute 'BORDER_THIN'
(即使我修正了拼写错误和导入不够的问题)。
有没有人知道如何在Python 3.3和OpenPyxl 2.0.4中加边框?我只想要一段代码,如果我把它复制粘贴到一个空白的脚本里,就能给工作簿中的任何单元格加上边框。
6 个回答
1
如果我想在一个单元格里只显示底部的边框,那么只需要在代码中提到单元格的底部边框,像下面的代码一样就可以了。
from openpyxl.styles.borders import Border, Side
wb = Workbook()
ws = wb.active
thin_border = Border(bottom=Side(style='thin'))
ws.cell(row=3, column=2).border = thin_border
wb.save("test.xlsx")
4
把所有单元格的边框设置为白色,除了那些有值的单元格。
from openpyxl import Workbook
from openpyxl.styles import Side, Border
def set_border(ws, side=None, blank=True):
wb = ws._parent
side = side if side else Side(border_style='thin', color='000000')
for cell in ws._cells.values():
cell.border = Border(top=side, bottom=side, left=side, right=side)
if blank:
white = Side(border_style='thin', color='FFFFFF')
wb._borders.append(Border(top=white, bottom=white, left=white, right=white))
wb._cell_styles[0].borderId = len(wb._borders) - 1
if __name__ == '__main__':
from openpyxl.styles import Alignment
wb = Workbook()
ws = wb.active
ws.merge_cells('A1:J2')
ws['A1'] = 'Merge'
ws['A1'].alignment = Alignment(horizontal='center', vertical='center')
ws._current_row = 2
for i in range(1, 26):
ws.append([i] * 10)
side = Side(border_style='thin', color='FF0000')
set_border(ws, side)
wb.save('test.xlsx')
wb.close()
11
在openpyxl版本2.0.4中,这段代码对我来说是有效的:
from openpyxl.styles.borders import Border, Side
from openpyxl.styles import Style
from openpyxl import Workbook
thin_border = Border(left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin'))
my_style = Style(border=thin_border)
wb = Workbook()
ws = wb.get_active_sheet()
ws.cell(row=3, column=2).style = my_style
wb.save('border_test.xlsx')
13
这个回答适用于版本2.4.8。与之前的两个回答不同的是,边框的属性是border_style,而不是style。
from openpyxl.styles.borders import Border, Side, BORDER_THIN
thin_border = Border(
left=Side(border_style=BORDER_THIN, color='00000000'),
right=Side(border_style=BORDER_THIN, color='00000000'),
top=Side(border_style=BORDER_THIN, color='00000000'),
bottom=Side(border_style=BORDER_THIN, color='00000000')
)
ws.cell(row=3, column=2).border = thin_border
74
在openpyxl版本2.2.5中,这段代码对我来说是有效的:
from openpyxl.styles.borders import Border, Side
from openpyxl import Workbook
thin_border = Border(left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin'))
wb = Workbook()
ws = wb.get_active_sheet()
# property cell.border should be used instead of cell.style.border
ws.cell(row=3, column=2).border = thin_border
wb.save('border_test.xlsx')
文档中提到样式属性还有其他的值,具体可以查看这个链接:
值必须是以下几种之一:{‘double’(双线),‘dashed’(虚线),‘thin’(细线),‘medium’(中等线),‘mediumDashDot’(中等点划线),‘dashDot’(点划线),‘thick’(粗线),‘mediumDashed’(中等虚线),‘hair’(发丝线),‘dotted’(点线),‘slantDashDot’(斜点划线),‘mediumDashDotDot’(中等双点划线),‘dashDotDot’(点划点划线)}