首页 > 解决方案 > 使用 python-docx,当我更改表格单元格中的字体属性时,整个文档都会获取该属性

问题描述

我有一个有两列的表。我想在第 0 列中添加下划线,并在第 1 列中保持正常。

但是,如果我将第 0 列的单元格中的样式更改为.style.font.underline = True,则整个文档都会加下划线。

现在,如果另外我将第 1 列的单元格中的样式更改为.style.font.underline = False,第 0 列中的下划线就会消失。

这是一个例子:

import docx
from docx import Document
from docx.text.paragraph import Paragraph

doc = Document()
doc.add_paragraph('Before table')

table = doc.add_table(rows=0, cols=2)
row_cells = table.add_row().cells
row_cells[0].text = "Dog"
row_cells[0].paragraphs[0].style.font.underline = True

row_cells[1].text = "Grey"
# row_cells[1].paragraphs[0].style.font.underline = False

row_cells = table.add_row().cells
row_cells[0].text = "Cat"
row_cells[0].paragraphs[0].style.font.underline = True

row_cells[1].text = "Black"
# row_cells[1].paragraphs[0].style.font.underline = False

doc.add_paragraph('After table')

doc.save(r"table_test.docx")

运行此示例以查看整个文档如何加下划线。

现在取消注释被注释的行,再次运行,你会看到下划线到处都消失了,包括第 0 列。

标签: python-docx

解决方案


这是因为您正在更改样式的字体,并且该样式(可能是“正常”)应用于表格中的所有段落。

通常,字体特征应用于Run级别。例如,这就是为什么您可以在句子中间使用粗体字的原因。

row_cells = table.add_row().cells
cell = row_cells[0]
# ---each newly-added cell contains a single empty paragraph---
paragraph = cell.paragraphs[0]
run = paragraph.add_run("Dog")
run.underline = True

推荐阅读