Python-docx如何在表格中为不同单元格应用不同的样式

4

在python-docx中处理表格。我正在尝试将不同的样式应用于表格的第一行和其余行。这将是标题行。以下是该表格:

table2 = doc.add_table(rows=10, cols=3)
heading_cells_table2 = table2.rows[0].cells 
heading_cells_table2[0].text = 'Header 1'
heading_cells_table2[1].text = 'Header 2'
heading_cells_table2[2].text = 'Header 3'

我希望我能做这样的事情:
table2.rows[0].style = table_heading_style

我已经尝试了许多其他的.add_run()、.cells、.font、.text等组合,但都没有成功。
是否可以更改表格中单个单元格/行/列的格式?如果可以,如何操作?
谢谢您的帮助。
编辑
以下是一个具体的示例,展示了如何在表格中居中文本的2列(而不是3列),感谢scanny的帮助。
for column in itertools.islice(table2.columns, 1, 3):
    for cell in column.cells:
        for paragraph in cell.paragraphs:
            paragraph.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
1个回答

5

段落样式只能应用于段落。

for paragraph in cell.paragraphs:
    paragraph.style = document.styles['Heading 1']

每个段落都是单元格内的有序列表吗?让我们使用一个简单的例子。假设我有一个表格样式,其中所有段落都是粗体。假设有一个单元格,我想要将段落改为斜体。这是否可能? - Ryan Skene
一个单元格包含.paragraphs中的一系列段落。每个段落都有一个可选样式。要将样式应用于单元格中的段落,必须逐个段落地应用段落样式。请注意,在Word文档的上下文中,样式意味着特定的东西。像粗体或斜体这样的单个字符格式属性是在运行级别应用的。关于样式和python-pptx的更多信息,请参见:http://python-docx.readthedocs.io/en/latest/user/styles-understanding.html - scanny
1
好的,明白了。像任何其他列表一样访问单元格中的每个段落。再次感谢您的帮助。只需要再获得7个声望点就可以进行投票了。敢于梦想! - Ryan Skene
在Python中,有一个通用的“序列”概念。基本上它指定了一个接口。它是一个集合,其中项目的顺序被保留。它可以被迭代(for item in seq:),通过索引访问项(x_0 = xs[0]),并且它有一个长度(assert len(xs) == 3)。列表是一个序列,元组也是。在python-pptx中,“段落”是一个序列,但它不是一个列表。对于接口目的来说这并不重要,因为它实现了序列接口。我认为这是微妙的差别,但如果你打算在Python中做更多的事情,这是需要注意的地方 :) - scanny
非常感谢您的反馈,赞赏您提供的详细信息。了解序列和列表/元组等之间的区别绝对很重要。 - Ryan Skene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接