我正在使用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。 如果应用样式,它将自动应用于整个文档。
答案 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:
标题:-
指环王