Python办公自动化【Word设置文字样式、Word设置段落样式、Word生成通知书、Word读取内容】(五)-全面详解(学习总结---从入门到深化)

目录

Word设置文字样式

Word设置段落样式

Word生成通知书

Word读取内容


Word设置文字样式

常用方法与属性

|-------------------------------------------------------------------|----------|
| 函数名&属性 | 含义 |
| docx.shared.Inches() | 创建大小(英寸) |
| docx.shared.Pt() | 创建大小(像素) |
| docx.shared.RGBColor() | 创建颜色 |
| docx.text.run.Run.font.bold | 文字加粗 |
| docx.text.run.Run.font.italic | 文字斜体 |
| docx.text.run.Run.font.strike | 文字删除线 |
| docx.text.run.Run.font.shadow | 文字阴影 |
| docx.text.run.Run.font.size | 文字大小 |
| docx.text.run.Run.font.color.rgb | 文字颜色 |
| docx.text.run.Run._element.rPr.rFonts.set(qn('w:eastAsia'), '字体') | 文字字体 |

注意

我们在写word的时候,一般英文采用Arial和新罗马字体,中文是宋体和黑体

w:eastAsia是东亚的意思。应该是规定使用中文字体时确认"微软雅黑"是哪个地方的微软雅黑

记住即可

代码

python 复制代码
def use_style():
  from docx import Document
  from docx.shared import Pt,Inches,RGBColor
  # 创建文档
  doc1 = Document()
  # 设置加粗
  p1 = doc1.add_paragraph('这是段落1:\n')
  p1.runs[0].font.bold=True
  # 加粗
  p1.add_run('这是内容1.1_加粗\n').font.bold=True
  # 斜体
  p1.add_run('这是内容1.2_斜体\n').font.italic = True
  # 删除线
  p1.add_run('这是内容1.3_删除线\n').font.strike = True
  # 阴影
  p1.add_run('这是内容1.4_阴影\n').font.shadow = True
  # 字体大小
  p1.add_run('这是内容1.5_字体大小\n').font.size = Pt(30)
  # 颜色 rgb三原色 0-255
  p1.add_run('这是内容1.6_颜色\n').font.color.rgb = RGBColor(255,100,76)
  # 字体
  # p1.add_run('这是内容1.7_字体\n').font.name='微软雅黑' # 只写这个设置不成功的
  run = p1.add_run('这是内容1.7_字体\n')
  from docx.oxml.ns import qn
  '''
 AttributeError: 'NoneType' object has no attribute 'rFonts'
 直接设置字体,会报错,需要先声明字体名称
 '''
  run.font.name=''
 run._element.rPr.rFonts.set(qn('w:eastAsia'),'微软雅黑')
 
  doc1.save('./create_data/05_设置字体样式.docx')
 
if __name__ == "__main__":
  use_style()

Word设置段落样式

常用方法与属性

|----------------------------------------------|----------|
| 函数名&属性 | 含义 |
| paragraph.paragraph_format.alignment | 段落内容位置 |
| paragraph.paragraph_format.space_before | 段落前距离 |
| paragraph.paragraph_format.space_after | 段落后距离 |
| paragraph.paragraph_format.left_indent | 段落左边距离 |
| paragraph.paragraph_format.first_line_indent | 段落首行左边距离 |
| paragraph.paragraph_format.line_spacing | 段落间行间距代码 |

代码

python 复制代码
def use_style():
  from docx import Document
  from docx.enum.text import WD_ALIGN_PARAGRAPH
  from docx.shared import Pt
  # 创建文档
  doc1 = Document()
  # 段落居中
  doc1.add_paragraph('这是段落1:').paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
  # 设置整段离左侧距离
  doc1.add_paragraph('Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,Python的定位是"优雅"、"明确"、"简单",所以Python程序看上去总是...').paragraph_format.left_indent =Pt(50)
  # 设置首行左侧距离
  doc1.add_paragraph('Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,Python的定位是"优雅"、"明确"、"简单",所以Python程序看上去总是...').paragraph_format.first_line_indent = Pt(50)
  # 段落离上面的距离
  doc1.add_paragraph('这是段落2:').paragraph_format.space_before=Pt(30)
  # 段落离下面的距离
  doc1.add_paragraph('这是段落3:').paragraph_format.space_after=Pt(30)
  # 设置行间距
  doc1.add_paragraph('这是段落4:')
  doc1.add_paragraph('Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,Python的定位是"优雅"、"明确"、"简单",所以Python程序看上去总是...').paragraph_format.line_spacing = Pt(50)
 
  doc1.save('./create_data/06_设置段落样式.docx')


if __name__ =='__main__':
  use_style()

Word生成通知书

代码

python 复制代码
from docx import Document
from docx.shared import Pt,RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

from docx.oxml.ns import qn
def create_book():
  # 生成一个文档
  doc1 = Document()
  # 增加标题
  title = doc1.add_paragraph()
  run = title.add_run('录取通知书')
  # 设置标题的样式
  run.font.size = Pt(30)
  run.font.color.rgb = RGBColor(255,0,0)
  run.font.name = ''
 run._element.rPr.rFonts.set(qn('w:eastAsia'),'黑体')
  title.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
  # 增加内容
  doc1.add_paragraph('张三 同学:')
  content1 = doc1.add_paragraph('兹录取你入我校 人工智能技术 专业类学习。请凭本通知书来报道。具体时间、地点见《新生入学须知》。')
  # 设置内容样式
 content1.paragraph_format.first_line_indent = Pt(30)
 
 
  # 落款
  footer = doc1.add_paragraph('清华大学\n')
  footer.add_run('二0三0年八月十号')

   footer.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
  # 保存文档
  doc1.save('./create_data/07_录取通知书.docx')

def create_book2(name,major,school,_time):
  # 生成一个文档
  doc1 = Document()
  # 增加标题
  title = doc1.add_paragraph()
  run = title.add_run('录取通知书')
  # 设置标题的样式
  run.font.size = Pt(30)
  run.font.color.rgb = RGBColor(255,0,0)
  run.font.name = ''
 run._element.rPr.rFonts.set(qn('w:eastAsia'),'黑体')
  title.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
  # 增加内容
  doc1.add_paragraph(f'__{name}__ 同学:')
  content1 = doc1.add_paragraph(f'兹录取你入我校 __{major}__ 专业类学习。请凭本通知书来报道。具体时间、地点见《新生入学须知》。')
  # 设置内容样式

content1.paragraph_format.first_line_indent = Pt(30)
 
 
  # 落款
  footer = doc1.add_paragraph(f'{school}\n')
  footer.add_run(f'{_time}')
  footer.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
  # 保存文档
  doc1.save(f'./create_data/07_录取通知书_{name}.docx')


if __name__ == '__main__':
  # create_book()
  create_book2('吕布','人工智能技术','清华大学','二0三0年八月十号')

Word读取内容

常用方法与属性

|----------------|--------|
| 函数名&属性 | 含义 |
| doc.paragraphs | 获取段落 |
| doc.tables | 获取表格 |
| paragraph.text | 获取段落内容 |
| table.rows | 获取行对象 |
| row.cells | 获取表格对象 |
| cell.text | 获取表格数据 |

代码

python 复制代码
from docx import Document
def read_word():
  # 打开文档
  doc1 = Document('./base_data/原数据.docx')
  # 读取数据-段落
  for p in doc1.paragraphs:
    print(p.text)
  # 读取表格
  for t in doc1.tables:
    for row in t.rows:
      for c in row.cells:
        print(c.text,end=' ')
      print()


if __name__ == '__main__':
  read_word()

Word通过模板生成文档

代码

python 复制代码
from docx import Document
def create_word(_data):
  # 打开文档
  doc1 = Document('./base_data/word_模板.docx')
  # 读取里面的数据
  for p in doc1.paragraphs:
    # 替换新数据 如果直接级paragraph的text替换内容,会丢失样式
    # p.text = p.text.replace('{0}','000001')
    # p.text = p.text.replace('{1}','2030')
    # p.text = p.text.replace('{2}','01')
    # p.text = p.text.replace('{3}','01')
    # p.text = p.text.replace('{4}','01')
    # p.text = p.text.replace('{5}','01')
    # p.text = p.text.replace('{6}','闯红灯')
    # p.text =p.text.replace('{7}','600')
    for run in p.runs:
      run.text = run.text.replace('{0}',_data[0])
      run.text = run.text.replace('{1}',_data[1])
      run.text = run.text.replace('{2}',_data[2])
      run.text = run.text.replace('{3}',_data[3])
      run.text = run.text.replace('{4}',_data[4])
      run.text = run.text.replace('{5}',_data[5])
      run.text = run.text.replace('{6}',_data[6])
      run.text = run.text.replace('{7}',_data[7])
  # 保存新文件
  doc1.save(f'./create_data/09_模板生成文档_{_data[0]}.docx')
if __name__ == '__main__':
  data = [
  ('00001','2030','01','01','01','01','闯红灯','600'),
  ('00002','2030','02','01','01','01','违反禁令','300'),
  ('00003','2030','03','01','01','01','违章停车','300'),
  ('00004','2030','04','01','01','01','挑线','100'), 
  ('00005','2030','05','01','01','01','没礼让行人','300'),
 ]
  for d in data:
    create_word(d)
    # print(d)
相关推荐
古希腊掌管学习的神1 小时前
[搜广推]王树森推荐系统——矩阵补充&最近邻查找
python·算法·机器学习·矩阵
旭久1 小时前
SpringBoot的Thymeleaf做一个可自定义合并td的pdf表格
pdf·html·springboot
LucianaiB2 小时前
探索CSDN博客数据:使用Python爬虫技术
开发语言·爬虫·python
一个处女座的程序猿O(∩_∩)O2 小时前
小型 Vue 项目,该不该用 Pinia 、Vuex呢?
前端·javascript·vue.js
PieroPc4 小时前
Python 写的 智慧记 进销存 辅助 程序 导入导出 excel 可打印
开发语言·python·excel
hackeroink5 小时前
【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具
前端·xss
迷雾漫步者6 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart
向前看-7 小时前
验证码机制
前端·后端
梧桐树04298 小时前
python常用内建模块:collections
python
燃先生._.8 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js