当前位置: 首页 > news >正文

使用python-docx完成word操作

Table of Contents

  • 1  打开存储(另存为)文件
  • 2  增加标题
  • 3  增加段落和文字
  • 4  字体样式设置
  • 5  段落样式设置
  • 6  document中样式修改
  • 7  有序和无序类表
  • 8  添加图片
  • 9  添加表格
  • 10  在表格中操作图片 实现图片的布局
  • 11  表格样式 合并 行高 列宽 文字垂直居中
  • 12  页眉页脚 分页
from docx import Document
import os 
os.chdir('D:\docx_test')

打开存储(另存为)文件

document = Document()   # 创建一个空的文档
document.save('test.docx')  # 保存文档
document = Document('test.docx')  # 打开文档 
document.save('test1.docx')  #  另存为文档

增加标题

document = Document('test.docx')  # 打开文档 
document.add_heading('这是一个标题',level= 0)  # 增加一级标题
document.add_heading('这是一个小标题',level= 1)  # 增加二级标题 

增加段落和文字

 # add_paragraph 增加段落 可以用|n和|t等
paragraph1 = document.add_paragraph("这是第1个段落。\n 这里换行",) 
paragraph2 = document.add_paragraph("这是第2个段落") 
# insert_paragraph_before 在段落之前插入新的一段 
paragraph2.insert_paragraph_before('之前插入一段')
# 清除段落
paragraph2.clear()
document.save('test.docx')  # 保存文档

document = Document()   # 创建一个空的文档
paragraph1 = document.add_paragraph()
paragraph1.add_run('\n这是段落的主题内容').italic = True  # 设置斜体 
paragraph1.add_run('\n这是段落的主题内容').bold = True  # 设置粗体
paragraph1.add_run('\n这是段落的主题内容').underline= True  # 设置粗体
document.save('test.docx')  # 保存文档

字体样式设置

from docx.shared import Inches  #定义英尺
from docx.shared import Pt  #定义像素大小
from docx.shared import RGBColor  # 字体颜色
from docx.enum.text import WD_ALIGN_PARAGRAPH  # 对其方式 
from docx.oxml.ns import qn # 导入qn  不导入qn字体不能修改中文字体 
document = Document()   
# 创建自定义段落样式(第一个参数为样式名, 第二个参数为样式类型, 1为段落样式, 2为字符样式, 3为表格样式)
# 如同时设置斜体和粗体,应该使用style
# 字体样式设置
UserStyle1 = document.styles.add_style('UserStyle1', 1)
UserStyle1.font.size = Pt(20) # 设置字体尺寸
UserStyle1.font.color.rgb = RGBColor(216, 11, 123) # 设置字体颜色
UserStyle1.font.name = "Times New Roman" # 设置英文字体
UserStyle1._element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋')  # 设置中文字体 
UserStyle1.font.bold = True 
UserStyle1.font.underline = True

段落样式设置

'alignment':文本对齐方式,
'element',
'first_line_indent':首行缩进,
'keep_together':段中不分页,
'keep_with_next':和下一段保持同一页,
'left_indent':段落到页面左边距距离,
'line_spacing':行间距,
'line_spacing_rule',
'page_break_before':与前端分页,
'part',
'right_indent',
'space_after':段前间距,
'space_before':段后间距,
'tab_stops',
'widow_control'
UserStyle1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT # 居中文本  LEFT:左对齐 CENTER:居中对齐 RIGHT:右对齐等
UserStyle1.paragraph_format.line_spacing = Pt(30) # 行间距 距离有CM厘米 Pt磅数 和 Inches英尺 
UserStyle1.paragraph_format.first_line_indent = Pt(40) # 首行缩进 如果缩进2字符 可以用字体磅数*2 

paragraph2 = document.add_paragraph('加强贷款资金管理。贷款资金发放、本息回收代扣、止付等关键环节由银行自主决策,指令由银行发起。采用自主支付的,资金应直接发放至借款人银行账户;采用受托支付的,商业银行应当履行受托支付责任,将贷款资金最终支付给符合借款人合同约定用途的交易对象。商业银行应当自主完整保留贷款资金发放、本息回收等账户流水信息,主动加强贷款资金管理,并采取有效措施对贷款用途进行监测,确保贷款资金安全,防范合作机构截留、汇集、挪用',style = UserStyle1)
#
document.save('test.docx')  # 保存文档

document中样式修改

文档中的样式库可以在document.styles中查看 这里对默认字体进行修改

document = Document()   
document.styles['Normal'].font.name = u'宋体'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
document.styles['Normal'].font.size = Pt(20)
document.add_paragraph('新的段落')
document.save('test.docx')  # 保存文档

有序和无序类表

document = Document()   
document.styles['Normal'].font.name = u'宋体'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
document.styles['Normal'].font.size = Pt(20)
#  无序列表
document.add_paragraph('第一点',style="List Bullet")
document.add_paragraph('第二点',style="List Bullet")
#  有序列表
document.add_paragraph('第一点',style="List Number")
document.add_paragraph('第二点',style="List Number")

document.save('test.docx')  # 保存文档

添加图片

from docx.shared import Cm
document = Document()   
pic = document.add_picture('picture1.jpg',width=Cm(10))  # 添加图片 
document.paragraphs[-1].alignment = WD_ALIGN_PARAGRAPH.CENTER  # 将图片进行居中
document.save('test.docx')  # 保存文档

添加表格

table 有增加行 增加列 布局 自适应 等等操作 

add_column’,
‘add_row’,
‘alignment’,
‘autofit’,
‘cell’,
‘column_cells’,
‘columns’,
‘part’,
‘row_cells’,
‘rows’,
‘style’,
‘table’,
‘table_direction’

document = Document()  
table = document.add_table(rows = 2, cols= 2 )

cell = table.cell(0,0)  # 读取0,0表格
cell.text = 'allen'   # 修改表格文字 
row = table.rows[1]  # 读取第2行 
row.cells[0].text = 'row01'   # 修改表格文字 
row.cells[1].text = 'row02'
document.save('test.docx')  # 保存文档

在表格中操作图片 实现图片的布局

document = Document()  
table = document.add_table(rows = 1, cols= 2, )
table.alignment = WD_ALIGN_PARAGRAPH.CENTER # 表格居中对齐 
cell = table.cell(0,0)  #  定位0,0 
ph =cell.paragraphs[0]  # 定位0,0中第一个段落
ph.alignment  = WD_ALIGN_PARAGRAPH.CENTER # 段落居中对齐 
# 在段落中添加图片 
run = ph.add_run()  
run.add_picture('picture1.jpg', width=Cm(5))

# 在另一个表格中加入图片 实现两个图片比列 
cell = table.cell(0,1)
ph =cell.paragraphs[0]
run = ph.add_run()
run.add_picture('picture2.jpg', width=Cm(5))
ph.alignment  = WD_ALIGN_PARAGRAPH.CENTER
document.save('test.docx')  # 保存文档

表格样式 合并 行高 列宽 文字垂直居中

from docx.enum.table import WD_ALIGN_VERTICAL
document = Document()  
table = document.add_table(rows = 2, cols= 3, style='Table Grid')  # 设置框线
table.rows[0].height=Cm(2)  # 设置行高 
table.cell(0,0).merge(table.cell(0,1))  # 合并第一行第一个和第二个单元格表格 
# 段落中文字居中
table.cell(0,2).paragraphs[0].add_run('1')
table.cell(0,2).paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER  
table.cell(0,2).vertical_alignment = WD_ALIGN_VERTICAL.CENTER # 垂直居中
table.cell(0,0).text = "0"
table.cell(0,0).width = Cm(15)  # 设置列宽
# table.cell(0,1).text = "1"
document.save('test.docx')  # 保存文档

页眉页脚 分页

document = Document()  
# 页眉 
header = document.sections[0].header 
ph1 = header.add_paragraph('页眉')
ph1.alignment = WD_ALIGN_PARAGRAPH.CENTER 
# 页脚 
footer = document.sections[0].footer
footer.add_paragraph('页脚')
# 分页 
document.add_paragraph('段落1')
document.add_page_break()
document.add_heading('标题',level=2)
document.save('test.docx')  # 保存文档

相关文章:

  • Interactive Tools Recommendation System integrating QT/ROS /Pytorch
  • 嵌入式属于人工智能吗?
  • Linux操作系统——进程控制【一】
  • 鸡葡萄菌感染怎么防治 预防鸡感染球菌病吃啥药
  • 技术分享 | App测试时常用的adb命令你都掌握了哪些呢?
  • 鸡得关节炎有哪些症状 鸡喂什么药预防球菌病
  • Dockerfile的使用-利用docker构建包含jdk ,vim centos
  • LeetCode-946-验证栈序列
  • vnc服务
  • Js各种时间转换问题(YYYY-MM-DD 时间戳 中国标准时间)
  • 李迟2022年8月工作生活总结
  • 百度 T4 幕后揭秘!这份 Java 面试全栈手册竟让面试官节节败退
  • 干货分享:有什么软件可以让照片动起来?
  • 鸡防治球菌病的措施 鸡防球菌病抗菌的药
  • 电子产品有害物质测试项目有哪些?
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 〔开发系列〕一次关于小程序开发的深度总结
  • android 一些 utils
  • js
  • Js基础知识(四) - js运行原理与机制
  • Material Design
  • Web Storage相关
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 飞驰在Mesos的涡轮引擎上
  • 前嗅ForeSpider采集配置界面介绍
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • # 数论-逆元
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (十六)Flask之蓝图
  • (四)Controller接口控制器详解(三)
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)平衡树
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [C/C++随笔] char与unsigned char区别
  • [error] 17755#0: *58522 readv() failed (104: Connection reset by peer) while reading upstream
  • [FT]chatglm2微调
  • [IDF]被改错的密码
  • [JavaWeb玩耍日记]Maven的安装与使用
  • [luoguP3159] [CQOI2012]交换棋子(最小费用最大流)
  • [Mvc]在ASP.NET MVC中使用Repeater
  • [Neural Network] {Université de Sherbrooke} L2.9 Param Initialization
  • [one_demo_15]模拟交通灯管理系统
  • [POI2007] ZAP-Queries (莫比乌斯反演)
  • [Python] scikit-learn之mean_squared_error函数(Mean Squared Error(MSE))介绍和使用案例
  • [Raspberry Pi] Raspberry Pi 4配置OpenCV4.6.0和ncnn环境(32-bit operation system)
  • [STM32F407ZET6] GPIO
  • [TroubleShooting]CentOS8使用pyenv部署多版本python时报 python: command not found
  • [VUE]1-创建vue工程
  • [yolov9]使用python部署yolov9的onnx模型