如何通过 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_boldmake_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')