如何在python docx中加粗行单元格的文本?

时间:2019-01-17 10:12:39

标签: python python-docx

我正在使用python docx模块生成一个文档。 我想在python docx中加粗一行的特定单元格

这是代码

book_title = '\n-:\n {}\n\n'.format(book_title)
book_desc = '-: {}\n\n:\n{}\n\n :\n{}'.format(book.author,book_description,sales_point)


row1.cells[1].text = (book_title + book_desc)

我只想加粗book_title。 如果应用样式,它将自动应用于整个文档。

4 个答案:

答案 0 :(得分:1)

这是我的理解方式: 段落是运行对象,样式(粗体,斜体)是运行方法。 因此,遵循此逻辑可以解决您的问题:

row1_cells[0].paragraphs[0].add_run(book_title + book_desc).bold=True

这只是表的第一个单元格的示例。请在您的代码中对其进行修改。

答案 1 :(得分:1)

一个单元格没有字符样式;字符样式只能应用于文本,尤其是文本的 run 。实际上,这是运行的定义特征,是具有相同字符格式的一系列字符,在python-docx中也称为 font

要获得与书名不同的字体的书名,它们需要单独显示。分配给Cell.text(如您所愿)会导致所有文本都在一次运行中。

这可能对您有用,但假设您在开始时该单元格为空:

paragraph = row1.cells[1].paragraphs[0]
title_run = paragraph.add_run(book_title)
description_run = paragraph.add_run(book_desc)
title_run.bold = True

可以使此代码更紧凑:

paragraph = row1.cells[1].paragraphs[0]
paragraph.add_run(book_title).bold = True
paragraph.add_run(book_desc)

但也许以前的版本使您在每个步骤中所做的工作更加清晰。

答案 2 :(得分:0)

由于使用的是docx模块,因此可以通过显式定义样式来设置文本/段落的样式。

要应用样式,请使用docx文档here中引用的以下代码段。

>>> from docx import Document
>>> document = Document()
>>> style = document.styles['Normal']
>>> font = style.font
>>> font.bold= True

这会将所应用段落的字体样式更改为粗体。

答案 3 :(得分:0)

在python-docx中,可以通过使用Rich Text样式来覆盖docx模板文档中任何字符的样式。您应在字符/字符串的位置为模板中需要样式的特定字符/字符串提供上下文变量。此变量映射到具有样式定义(您在代码中定义)的RichText对象,以设置字符/字符串的样式。为了使事情更清楚,请考虑示例模板doc“ test.docx”,其中包含以下文本:

  

你好{{r context_var}}!

{{..}}是jinja2标签的语法,而{{r是RichText标签,它覆盖了字符样式。 context_var是一个将样式映射到您的字符串的变量。 我们可以像这样完成Rich Text样式:

from docxtpl import DocxTemplate, RichText
doc = DocxTemplate("test.docx")
rt = RichText() #create a RichText object
rt.add('World', bold=True) #pass the text as an argument and the style, bold=True
context = { 'context_var': rt } #add context variable to the context and map it to rt
doc.render(context) #render the context
doc.save("generated_doc.docx") #save as a new document

让我们看一下“ generated_doc.docx”的内容:

  

你好世界

我不确定模板的设计方式,但是如果您只想将book_title设置为粗体,则模板“ test.docx”的文本应为:

  

标题:-

     

{{r book_title_var}}

代码应修改为:

book_title = "Lord of the Rings" #or wherever you get the book title from
rt.add(book_title, bold=True)
context = { 'book_title_var': rt }

generated_doc.docx:

  

标题:-

     

指环王