部分字体标红,不知道如何实现

部分字体标红,不知道如何实现

问题描述:

本小节练习中的部分字体标红,不知道如何实现,如下为我的作业,请老师指导下

https://img1.sycdn.imooc.com//climg/6530ec9b09ddeba010120541.jpg

相关代码:

# coding:utf-8

from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Pt,RGBColor
from docx.oxml.ns import qn

doc = Document()

# 添加标题,标题级别0,并将标题居中
title = doc.add_heading('慕课网是谁',0)
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

style = doc.styles['Normal']
style.font.name = '微软雅黑'
style.element.rPr.rFonts.set(qn('w:eastAsia'),u'微软雅黑')

# 添加正文段落,微软雅黑,15号字体,其中三个学者标红
# 1.添加内容
p = doc.add_paragraph('我们是IT教育行业的造梦者,也是前沿技术内容的创造者和传播者!\n')
p.add_run('\n体系课:\n\n')
list_1 = ['1.Python全栈工程师','2.Java工程师','3.前端工程师']
for i in range(3):
    p.add_run(list_1[i])
    p.add_run('\n')
print(p.text)
# 2.设置字体
p.style.font.name = '微软雅黑'
p.style.font.size = Pt(15)

# 3.设置部分字体红色???
list_2 = ['造梦者','创造者','传播者']
para_1 = doc.paragraphs[0].text
for i in list_2:
    if i in para_1:
        run = para_1.add_run(i)
        run.style.font.color.rgb = RGBColor(255,0,0)

# 分页,并添加标题,标题级别0
doc.add_page_break()
doc.add_heading('学生信息',0)

# 添加表格,三行四列,并将2名成员信息填入
r=3
c=4
table = doc.add_table(r,c)
list_3 = [
    ('序号','姓名','年龄','身高'),
    ('1','张三','20','174'),
    ('2','李四','19','167')
    ]

for i in range(r):
    row_cells = table.rows[i].cells
    for j in range(c):
        row_cells[j].text = list_3[i][j]


# 保存文件并命名为demo.docx
doc.save(r'C:\Users\Clip\Desktop\demo.docx')


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小猿 2023-10-19 18:00:15

同学,你好!字体不像是字符串可以占位,然后使用for 循环再填充设置好的其它汉字。我们中间还有正常的不设置颜色的内容,只能按顺序设置红色字体,再设置正常的字体,不能使用循环。修改代码如下:

# coding:utf-8

from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn

doc = Document()

# 添加标题,标题级别0,并将标题居中
title = doc.add_heading('慕课网是谁', 0)
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

style = doc.styles['Normal']
style.font.name = '微软雅黑'
style.element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')

# 添加正文段落,微软雅黑,15号字体,其中三个学者标红
# 1.添加内容
style.font.size = Pt(15)
# 添加标题,级别为0并居中显示
p= doc.add_paragraph('我们是IT教育行业的')
# 在段落后面追加文本,并可设置样式
_p = p.add_run('造梦者')
_p.font.color.rgb = RGBColor(255, 0, 0)
p.add_run(',也是前沿技术内容的')
_p = p.add_run('创造者')
_p.font.color.rgb = RGBColor(255, 0, 0)
p.add_run('和')
_p = p.add_run('传播者')
_p.font.color.rgb = RGBColor(255, 0, 0)
p.add_run('!')
#p = doc.add_paragraph('我们是IT教育行业的造梦者,也是前沿技术内容的创造者和传播者!\n')
p.add_run('\n体系课:\n\n')
list_1 = ['1.Python全栈工程师', '2.Java工程师', '3.前端工程师']
for i in range(3):
    p.add_run(list_1[i])
    p.add_run('\n')
print(p.text)
# 2.设置字体
p.style.font.name = '微软雅黑'
p.style.font.size = Pt(15)

# 3.设置部分字体红色???
# list_2 = ['造梦者', '创造者', '传播者']
# para_1 = doc.paragraphs[0].text
# for i in list_2:
#     if i in para_1:
#         run = para_1.add_run(i)
#         run.style.font.color.rgb = RGBColor(255, 0, 0)

# 分页,并添加标题,标题级别0
doc.add_page_break()
doc.add_heading('学生信息', 0)

# 添加表格,三行四列,并将2名成员信息填入
r = 3
c = 4
table = doc.add_table(r, c)
list_3 = [
    ('序号', '姓名', '年龄', '身高'),
    ('1', '张三', '20', '174'),
    ('2', '李四', '19', '167')
]

for i in range(r):
    row_cells = table.rows[i].cells
    for j in range(c):
        row_cells[j].text = list_3[i][j]

# 保存文件并命名为demo.docx
doc.save(r'C:\Users\Clip\Desktop\demo.docx')

祝学习愉快~

  • 提问者 曲别针010 #1

    老师好,我从网络上找到了一段代码,如下,是可以将制定关键字变红的,但其中使用的runs函数和text.split函数不是很理解,导致如下代码看不透彻,应用不灵活。请老师帮忙解释下。

    另外还有个问题,如果后续遇到类似的情况,即遇到新的函数,该从哪里学习它的作用和使用方式呢?(从网络上找的答案很多,而且不是很契合)

    # coding: utf-8
    
    import docx
    from docx.shared import RGBColor,Pt
    
    
    def set_run(run,font_size,bold,color):
        run.font.size =font_size
        run.bold=bold
        run.font.color.rgb=color
    
    file = docx.Document('demo.docx')
    
    for i in range(len(file.paragraphs)):
        for r in file.paragraphs[i].runs:
            font_size = r.font.size
            bold = r.bold
            color = r.font.color.rgb
            rest = r.text.split("造梦者")         # 这里为想要标红的文本
            r.text = ''
            for text in rest[:-1]:
              run = file.paragraphs[i].add_run(text=text)
              set_run(run,font_size,bold,color)
              run = file.paragraphs[i].add_run("造梦者")      # 这里为想要标红的文本
              run.font.size = font_size
              run.bold = bold
              run.font.color.rgb = RGBColor(255, 0, 0)
            run = file.paragraphs[i].add_run(rest[-1])
            set_run(run,font_size,bold,color)
    
    file.save('demo.docx')


    2023-10-19 21:10:25
  • 好帮手慕小猿 回复 提问者 曲别针010 #2

    同学,你好!同学提供下demo.docx 里的内容,或查找的链接地址

    https://img1.sycdn.imooc.com//climg/653223fa0983c9cc04470239.jpg

    方便解决同学的问题

    祝学习愉快~


    2023-10-20 14:55:35
  • 提问者 曲别针010 回复 好帮手慕小猿 #3

    demo.docx

    慕课网是谁

    我们是IT教育行业的造梦者,也是前沿技术内容的创造者和传播者!

    体系课:

    1.Python全栈工程师
    2.Java工程师
    3.前端工程师
    造梦者创造者传播者


    2023-10-22 09:05:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师