我试图用python的第三方excel软件包openpyxl创建一个表格来制表数据。 代码的第一个声明从单元格' A5'中抽取一行。到了小区' E5', 第二个for语句从单元格' A6'中抽取另一个行。细胞' E6' 第三个for语句从单元格' C5'中绘制一个列线。细胞' C9' 第四个for语句从单元格' F5到单元格' F9'
中绘制另一列然而,从单元格C5'中抽取的列边框到了C9'似乎打破了 当它与从细胞' A5到' E5'的行线相交时和' A6'到' E6'和 开始画在' C7'而不是' C5'。
从单元格F5':' F9'中绘制列边界线。工作得很好。 (我会发布正在创建的表的图像,但我的声誉不到10) 我在某个地方做错了什么?
from openpyxl import Workbook
from openpyxl.styles import Border, Side
wb = Workbook()
ws = wb.active
ws.sheet_view.showGridLines = False
column_border = Border(left=Side(style='thin'))
row_border = Border(top=Side(style='thin'))
for col in ws['C5:C9']:
for cell in col:
cell.border = column_border
for col in ws['F5:F9']:
for cell in col:
cell.border = column_border
for row in ws['A5:E5']:
for cell in row:
cell.border = row_border
for col in ws['A6:E6']:
for cell in col:
cell.border = row_border
wb.save('a.xlsx')
答案 0 :(得分:1)
问题是你正在覆盖它们相交的那些单元格的Border对象。前两个循环将单元格的Border对象设置为左侧的细线。接下来的两个循环将单元格的边框对象设置为顶部的细线 - 但这会删除创建顶线的原始Border对象。
我建议做的是创建两个方法添加border对象。这些方法将检查边框是否已存在。如果是这样,它会增加它而不是替换它。然后在循环中调用这些方法,而不是直接赋值。
此代码可能有效,也可能无效,我当前的系统没有安装OpenPyXL,我需要管理员权限才能安装它。
def add_row_boarder(row_cell):
if row_cell.border = None:
row_cell.border = row_border
else:
row_cell.border.top = Side(style='thin')
return row_cell
def add_col_boarder(col_cell):
if col_cell.border = None:
col_cell.border = col_border
else:
col_cell.border.left = Side(style='thin')
return col_cel
答案 1 :(得分:1)
正如Rob所说,你正在覆盖某些细胞的边界。 documentation提供了格式化单元格范围的通用方法,但基本上您只需组合样式cell.border = cell.border + row_border