如何通过 python-docx 将列表项目符号中的某些单词加粗
How do I make some part of words in list bullet bold by python-docx
现在我有一个名为 k = ['aaa bbb', 'ccc ddd', 'eee fff']
的列表。
我想通过 list bullet
将列表 k 写入 word file
,并且我希望 aaa bbb
(k[0]) 在 word 文件中加粗。 k中其他元素的其余部分是正常的。
换句话说,我希望它显示为 this
但是,无论我怎么尝试,结果都显示没有元素是粗体。
另外,可不可以只aaa
加粗。
就像this
我试过"bold"、"font"、"styles"等功能。
但它们不起作用。
document = Document()
k = ['aaa bbb', 'ccc ddd', 'eee fff']
for i in range(len(k)):
if i ==1:
run = document.add_paragraph(k[i], style = "List Bullet")
run.bold = True
else:
run = document.add_paragraph(k[i], style = "List Bullet")
结果不是我所期望的。
运行后没有粗体字
问题是 add_paragraph
return 是段落引用,而不是 运行。
不过我发现创建一个空的项目符号列表然后 add_run(string)
更方便,每次都设置 bold = True
。
如果我们也更改解析行的逻辑(使用 enumerate
将当前行的索引也放入您的 k
列表中)我们可以设置两个布尔变量,make_only_first_word_bold
和make_only_first_line_bold
.
对于第一个,我们指定只有一行的第一个单词必须加粗,而对于第二个,我们指定是否只有列表的第一行必须加粗。
这导致我们有四种不同的组合:没有加粗、全部加粗、所有第一个单词加粗和仅加粗第一行的第一个单词。
from docx import Document
document = Document()
k = ['aaa bbb', 'ccc ddd', 'eee fff']
make_only_first_word_bold = True
make_only_first_line_bold = True
for idx, line in enumerate(k):
if make_only_first_word_bold:
words = line.split(maxsplit=1) # ['aaa', 'bbb even_more_things']
word_to_bold = words[0] + ' '
leftover = words[1]
else:
word_to_bold = line
leftover = None
if make_only_first_line_bold and idx > 0:
word_to_bold = None
leftover = line
paragraph = document.add_paragraph(style='List Bullet')
if word_to_bold:
paragraph.add_run(word_to_bold).bold = True
if leftover:
paragraph.add_run(leftover)
document.save('test.docx')
现在我有一个名为 k = ['aaa bbb', 'ccc ddd', 'eee fff']
的列表。
我想通过 list bullet
将列表 k 写入 word file
,并且我希望 aaa bbb
(k[0]) 在 word 文件中加粗。 k中其他元素的其余部分是正常的。
换句话说,我希望它显示为 this 但是,无论我怎么尝试,结果都显示没有元素是粗体。
另外,可不可以只aaa
加粗。
就像this
我试过"bold"、"font"、"styles"等功能。 但它们不起作用。
document = Document()
k = ['aaa bbb', 'ccc ddd', 'eee fff']
for i in range(len(k)):
if i ==1:
run = document.add_paragraph(k[i], style = "List Bullet")
run.bold = True
else:
run = document.add_paragraph(k[i], style = "List Bullet")
结果不是我所期望的。 运行后没有粗体字
问题是 add_paragraph
return 是段落引用,而不是 运行。
不过我发现创建一个空的项目符号列表然后 add_run(string)
更方便,每次都设置 bold = True
。
如果我们也更改解析行的逻辑(使用 enumerate
将当前行的索引也放入您的 k
列表中)我们可以设置两个布尔变量,make_only_first_word_bold
和make_only_first_line_bold
.
对于第一个,我们指定只有一行的第一个单词必须加粗,而对于第二个,我们指定是否只有列表的第一行必须加粗。
这导致我们有四种不同的组合:没有加粗、全部加粗、所有第一个单词加粗和仅加粗第一行的第一个单词。
from docx import Document
document = Document()
k = ['aaa bbb', 'ccc ddd', 'eee fff']
make_only_first_word_bold = True
make_only_first_line_bold = True
for idx, line in enumerate(k):
if make_only_first_word_bold:
words = line.split(maxsplit=1) # ['aaa', 'bbb even_more_things']
word_to_bold = words[0] + ' '
leftover = words[1]
else:
word_to_bold = line
leftover = None
if make_only_first_line_bold and idx > 0:
word_to_bold = None
leftover = line
paragraph = document.add_paragraph(style='List Bullet')
if word_to_bold:
paragraph.add_run(word_to_bold).bold = True
if leftover:
paragraph.add_run(leftover)
document.save('test.docx')