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

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

问题描述:

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

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

相关代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 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.添加内容
= doc.add_paragraph('我们是IT教育行业的造梦者,也是前沿技术内容的创造者和传播者!\n')
p.add_run('\n体系课:\n\n')
list_1 = ['1.Python全栈工程师','2.Java工程师','3.前端工程师']
for 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 in list_2:
    if 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 in range(r):
    row_cells = table.rows[i].cells
    for 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 循环再填充设置好的其它汉字。我们中间还有正常的不设置颜色的内容,只能按顺序设置红色字体,再设置正常的字体,不能使用循环。修改代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# 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(25500)
p.add_run(',也是前沿技术内容的')
_p = p.add_run('创造者')
_p.font.color.rgb = RGBColor(25500)
p.add_run('和')
_p = p.add_run('传播者')
_p.font.color.rgb = RGBColor(25500)
p.add_run('!')
#p = doc.add_paragraph('我们是IT教育行业的造梦者,也是前沿技术内容的创造者和传播者!\n')
p.add_run('\n体系课:\n\n')
list_1 = ['1.Python全栈工程师''2.Java工程师''3.前端工程师']
for 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名成员信息填入
= 3
= 4
table = doc.add_table(r, c)
list_3 = [
    ('序号''姓名''年龄''身高'),
    ('1''张三''20''174'),
    ('2''李四''19''167')
]
 
for in range(r):
    row_cells = table.rows[i].cells
    for 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函数不是很理解,导致如下代码看不透彻,应用不灵活。请老师帮忙解释下。

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    # 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 in range(len(file.paragraphs)):
        for 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(25500)
            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下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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