求一个参考答案,有没有比较简单的方法去设置个别几个字的字体?如何设置中文字体?

来源:3-9 自由编程

冰心本燃

2023-08-04 14:45:50

# coding:utf-8

from docx import Document
from docx.shared import Inches
from docx.shared import RGBColor
from docx.shared import Pt
from docx.oxml.ns import qn
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.enum.style import WD_STYLE_TYPE

doc = Document()

style = doc.styles['Normal']
style.font.name = '微软雅黑'
style._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
# style.font.color.rgb = RGBColor(255,255,0)
style.font.size = Pt(15)

title = doc.add_heading('', 0)
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
title_style = title.style
title_style.font.name = '微软雅黑'
title_style._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
title.add_run('慕课网是谁')

p = doc.add_paragraph('我们是IT教育行业的')
p.style.font.name = '微软雅黑'
p1 = p.add_run('造梦者')
p1.font.color.rgb = RGBColor(255, 0, 0)
p.add_run(',也是前沿技术内容的')
p2 = p.add_run('创造者')
p2.font.color.rgb = RGBColor(255, 0, 0)
p.add_run('和')
p3 = p.add_run('传播者')
p3.font.color.rgb = RGBColor(255, 0, 0)
p.add_run('!')
p.add_run('\n体系课:\n1. Python全栈工程师\n2. Java工程师\n3. 前端工程师')

doc.add_page_break()

title2 = doc.add_heading('', 0)
title2_style = title2.style
title2_style.font.name = '微软雅黑'
title2_style._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
title2.add_run('学生信息')

title_list = ['序号', '姓名', '年龄', '身高']
student_list = [
    ('1', '张三', '20', '174'),
    ('2', '李四', '19', '167')
]

table = doc.add_table(rows=1, cols=4,style='Table Grid')
title_cells = table.rows[0].cells

for index, item in enumerate(title_list):
    title_cells[index].text = item

for data in student_list:
    row_cells = table.add_row().cells
    for i,d in enumerate(data):
        row_cells[i].text = d

doc.save('demo.docx')

设置特别几个字为红色的时候感觉代码很冗余,课程里面没有教怎么设置中文字体,直接设置font.name对中文无效

写回答

1回答

好帮手慕小猿

2023-08-07

同学,你好!1、参考代下:

from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import RGBColor, Pt
from docx.oxml.ns import qn
document = Document()
style = document.styles['Normal']
# 设置正文字体为微软雅黑
style.font.name = '微软雅黑'
style._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
style.font.size = Pt(15)
# 添加标题,级别为0并居中显示
title = document.add_heading('', 0)
title.add_run('慕课网是谁')
p1 = document.add_paragraph('我们是IT教育行业的')
# 在段落后面追加文本,并可设置样式
_p = p1.add_run('造梦者')
_p.font.color.rgb = RGBColor(255, 0, 0)
p1.add_run(',也是前沿技术内容的')
_p = p1.add_run('创造者')
_p.font.color.rgb = RGBColor(255, 0, 0)
p1.add_run('和')
_p = p1.add_run('传播者')
_p.font.color.rgb = RGBColor(255, 0, 0)
p1.add_run('!')
document.add_paragraph('体系课:')
# 添加项目列表(前面数字)
document.add_paragraph('Python全栈工程师', style='List Number')
document.add_paragraph('Java工程师', style='List Number')
document.add_paragraph('前端工程师', style='List Number')
#第二页
document.add_page_break()
title = document.add_heading('学生信息', 0)
# 添加表格
table = document.add_table(3, 4, style='Table Grid')
data = [['序号', '姓名', '年龄', '身高'],
        ['1', '张三', '20', '174'],
        ['2', '李四', '19', '167']]
# 表头
table_header = table.rows[0].cells
for col_i in range(4):
    table_header[col_i].text = data[0][col_i]
# 录入数据
for row_i in range(1, 3):
    table_data = table.rows[row_i].cells
    for col_i in range(4):  # 遍历列
        table_data[col_i].text = data[row_i][col_i]
# 保存.docx文档
document.save('demo.docx')

2、个别设置字体需要单独设置个别字体,没有简单做法。参考如下:先将正文设置的字体取消,如下图红框内容。不同字体设置参考绿色框的内容

https://img.mukewang.com/climg/64d05d9f09beea1507370609.jpg

https://img.mukewang.com/climg/64d05dcb09151d7207500201.jpg

祝学习愉快~

1

Python全能工程师 2024 版

8阶段5大热门领域,从入门到实战,带你从零基础晋级全能,全面提升就业力

1568 学习 · 855 问题

查看课程