上一篇内容的表格添加到word中之后没有边框线。
可以将代码修改为如下:
def replace_tag_with_table(doc, tag, data):
'''
将word中的标签替换为表格
:param doc: 文档 Document
:param tag: 标签 string
:param data: 表格数据 第一个数组为表头 [['A', 'B', 'C'], ['见附件是垃圾', '2', '3'], ['4', '5', '6']]
:return: 无
'''
for paragraph in doc.paragraphs:
if tag in paragraph.text:
# 创建表格
table = doc.add_table(rows=len(data), cols=len(data))
for i, row in enumerate(data):
for j, cell in enumerate(row):
table.cell(i, j).text = cell
# 替换段落中的标签为表格
paragraph.text = ''
paragraph._p.addnext(table._tbl)
for i, row in enumerate(data):
for j, cell in enumerate(row):
cell_1 = table.cell(i, j)
#设置单元格边框
set_cell_border(cell_1)
# 设置段落居中
cell_1.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 设置文本居中
for paragraph in cell_1.paragraphs:
for run in paragraph.runs:
#run._element.rPr.rFonts.set(qn('w:eastAsia'), 'SimSun') # 设置中文字体为宋体,根据需要调整
run.font.bold = i == 0 # 只加粗表头
# 设置单元格边框样式
def set_cell_border(cell, size=12, color='000000'):
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
borders = tcPr.find(qn('w:tcBorders'))
if borders is None:
borders = OxmlElement('w:tcBorders')
tcPr.append(borders)
for border_name in ['top', 'left', 'bottom', 'right']:
border = OxmlElement('w:{}'.format(border_name))
border.set(qn('w:val'), 'single') # 设置边框为单线
border.set(qn('w:sz'), str(size)) # 设置边框大小
border.set(qn('w:color'), color) # 设置边框颜色
border.set(qn('w:space'), '0') # 设置边框间距
borders.append(border)
# 确保tcPr元素中有tcBorders元素
if tcPr.getparent() is not None:
tcPr.getparent().remove(tcPr)
tc.append(tcPr)