python_docx制作word文档详细使用说明

2023-11-05

        在实习工作中,遇到用python制作word模板的任务,其实说白了就是python-docx的使用。目前网上对这一个库的介绍得很少,很零散,所以很多功能我是尽量参考其官网,但是官网上面很多功能目前只有说明文档,而代码并还没有及时更新,以至于按照官网上面做了,python却报错。比如:自定义表格的高度。下面,我对我在此次工作任务中,所遇到的一些基本的功能分别做一下说明与展示。我用的是python2.7

      1.创建文档     

from docx import Document
document = Document()

若括号里面写入word文件路径,则表明打开该文件

     2.添加标题

document.add_heading('This is my title', 0)

但是,这个有个问题是标题下面有一条横线,对于重度强迫症的我是无法容忍的。所以我直接添加段落文字表示标题

  3.添加段落文字

document.add_paragraph('my paragraph')

但是,这只实现了默认格式的段落文字添加,且这里的文字只能是英文。如果要设置中文字体,且对文字设置对齐,颜色,大小等设置,则:

from docx.shared import RGBColor
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
document.styles['Normal'].font.name = u'黑体'      #可换成word里面任意字体
p = document.add_paragraph()
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中设置
run = p.add_run(u'我添加的段落文字')
run.font.color.rgb = RGBColor(54,95,145)             #颜色设置,这里是用RGB颜色
run.font.size = Pt(36)                 #字体大小设置,和word里面的字号相对应

4.添加图片

pic = document.add_picture('pic.png',width = Inches(1.5))     #图片和python文件不在同一个文件夹下面的时候,要补全文件地址

默认情况下,图片在文档中是左对齐的,如果要对图片进行居中显示,在网上找了很多方法都不可行,最后找到一种方法是直接加入以下代码:

last_paragraph = document.paragraphs[-1]
last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #图片居中设置

5.添加表格

table = document.add_table(rows=2, cols=3,style="Table Grid") #添加2行3列的表格

表格的style有很多种,默认情况下表格是没有边框的,Table Grid格式是普通的黑色边框表格,更多表格样式可以百度。但是,我们很多时候希望对表格进行更为漂亮的修改,比如自定义表格某一列的宽度,表格的高度。

from docx.shared import Inches
# table.autofit = False
col = table.columns[1]
col.width = Inches(5)     #设置表格第2列宽度为Inches(5) 默认情况下表格是自动适应文档宽度

对于表格的高度官网上面有说明文档,但是其库函数的代码没有更新,所以找了很久才找到下面一种方法,以后官网要是更新了代码可以按照官网上面的方法进行设置更为简单一些。

from docx.oxml.ns import qn
from docx.oxml import OxmlElement
for i in range(rows):     #遍历表格的所有行
    tr = table.rows[i]._tr
    trPr = tr.get_or_add_trPr()
    trHeight = OxmlElement('w:trHeight')
    trHeight.set(qn('w:val'), "450")          
    trPr.append(trHeight)                    #表格的每一行进行高度设置,450这个值可以任意修改

6.表格里面添加文字

heading_cells = table.rows[0].cells     #将表格的第一行设置为表头
for i in range(cols):         #cols为表格的列数
    p = heading_cells[i].paragraphs[0]    #利用段落功能添加文字
    run = p.add_run(Arr[i])      #把表头放在一个数组里面的,这样方便赋值
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER   #居中设置,默认是左对齐
还有一种直接对表格赋值的方式:
table.cell(i,j).text = u'表格文字'       #在表格的i行j列设置文字,默认文字在表格中是左对齐

7.添加表格行

row = table.add_row()

若需要对添加的行进行赋值,其方法和上面是一样的。

8.文档的保存

document.save('test.docx')  #可以设置其他路径

整体代码如下:

from docx import Document
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
from docx.shared import RGBColor
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import Inches


document = Document()
document.add_heading('This is my title', 0)
document.add_paragraph('my paragraph')

document.styles['Normal'].font.name = u'黑体'
p = document.add_paragraph()
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(u'我添加的段落文字 ')
run.font.color.rgb = RGBColor(54, 95, 145)
run.font.size = Pt(36)

pic = document.add_picture('logo1.PNG')
last_paragraph = document.paragraphs[-1]
last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER  # 图片居中设置

rows = 2
cols = 3
table = document.add_table(rows=rows, cols=cols,style = "Table Grid")  # 添加2行3列的表格

for i in range(rows):
    tr = table.rows[i]._tr
    trPr = tr.get_or_add_trPr()
    trHeight = OxmlElement('w:trHeight')
    trHeight.set(qn('w:val'), "450")
    trPr.append(trHeight)  # 表格高度设置
# table.autofit = False
col = table.columns[1]
col.width = Inches(5)
arr = [u'序号',u"类型",u"详细描述"]
heading_cells = table.rows[0].cells
for i in range(cols):
    p = heading_cells[i].paragraphs[0]
    run = p.add_run(arr[i])
    run.font.color.rgb = RGBColor(54, 95, 145)  # 颜色设置,这里是用RGB颜色
    run.font.size = Pt(12)  # 字体大小设置,和word里面的字号相对应
    p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
table.cell(1, 1).text = u'表格文字'
table.add_row()
document.save('test1.docx')

运行结果如下:






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python_docx制作word文档详细使用说明 的相关文章

随机推荐

  • 关于microsoft Store被删除了重新下载的问题

    分享一条连接 https jingyan baidu com article 4ae03de3b59d223eff9e6b39 html 另外补充一点 microsoftStore无法联网问题 https www pianshen com
  • 大数据是如何影响何改变我们生活的?

    大数据是如何影响何改变我们生活的 网上一则违法广告 普通市民可能一瞥而过 如今却逃不过重庆工商情报信息工作平台的 法眼 这正是因为重庆市工商局运用大数据 云计算 互联网 等技术手段 在全国工商系统率先建立的重庆工商情报信息工作平台 同样 重
  • 十分钟搭建一个EFK集群

    快速部署搭建ELK ELK 介绍 环境信息 架构 二进制部署 一 系统初始化 二 elasticsearch安装 所有节点 三 filebeat安装使用 四 nginx安装 五 kibana 安装 六访问elasticsearch出现yel
  • 卡方分布的latex代码

    网上没找到答案 自己看了一些还是mathcal字体比较像 最终选择mathcal字体 LaTeX LaTeX LATE X代码 编译示例 mathcal X 2 4 X
  • 深度理解取余/取模运算,你得知道这些...

    大家在日常编程或者学习中都会经常接触到取余 取模运算 那么计算机中取余 取模运算究竟是怎么定义的 读完本篇文章 相信你一点会有很大收获 文章目录 step 1 你可能不知道的四种 取整 方式 1 1 C语言中本质是 向0取整 1 2 flo
  • SpaCy下载及安装

    1 官网给的命令快速安装基本没用 结果就是一直拒绝你的连接 官网 https spacy io 官网是说用下面的两行命令就能够快速安装并使用spacy了 第一行命令是可以很快就成功 但是第二行就来坑了 报错如下图 报错内容是 request
  • 虚拟机的一些命令

    cd 目录名 cd 上一层目录 cd 回到跟目录 ls 当前目录下的内容 ls 目录名 指定目录下的内容 ls a 当前目录下的内容 隐藏内容 ls l 详细列出指定目录或者当前目录下的内容 pwd 查看当前所在的目录 创建目录 mkdir
  • kafka 由于网络原因,最后报错打开的文件过多 (org.apache.zookeeper.ClientCnxn)停止结束服务,求教! --- 采坑

    kafka 运行好好地 今天一用发现有一台服务停了 最后查看日志发现为网络原因 打开文件过多 代理停止 求教大佬解决方案 2019 05 01 17 59 08 224 INFO Socket error occurred 192 168
  • 开关电源基础03:正激和反激开关电源拓扑(1)-正激拓扑

    说在开头 关于薛定谔的波动方程 2 全新的量子理论诞生不到一年 很快面临着粒子和波动的内战 矩阵力学从直接观测到的原子谱线出发 引入矩阵的数学工具 建立了整个新力学的大厦 它强调观测到的分立性 跳跃性 同时又坚持以数学为唯一导向 不为日常生
  • 2016.6.5 计算机网络考试要点第一章之计算机网络性能

    1 8计算机网络性能指标 1 速率 比特率或数据率 比特是计算机中数据量的单位 也是信息论中使用的信息量的单位 意思是 一个二进制数字 因此一个比特就是二进制数字中的一个1或0 当数据率较高时 就可以用kb s k 10的3次方 千 Mb
  • Scanner类中next和nextLine方法的区别

    Scanner类中next和nextLine方法的区别 nextInt next nextDouble 从左往右扫描数据 在扫描到第一个有效字符之前会自动过滤结束标记符 扫描结束标记是 空格 tab键 回车符 不会过滤回车符 nextLin
  • MVC综合案例

    pojo Dept package com qf webpro pojo import java io Serializable public class Dept implements Serializable private int d
  • lua 协同程序(coroutine)

    本文主要是根据菜鸟教程的lua协同程序 coroutine 优化出来的文章 对于网上的lua协同程序的文章 觉得菜鸟教程里的lua协同程序 coroutine 比较完善 但还是有一些地方没有说清楚 对于像我这样的新手学习起来 还是不能完全解
  • python学习之Python count()函数详解

    大家好 依旧是你们的萧萧啊 Python中的count 函数是一种非常常用的方法 用于统计某个元素在列表 元组或字符串中出现的次数 它的使用非常简单 只需要传入要统计的元素作为参数即可 在本篇博客中 我将详细介绍count 函数的用法 并且
  • 数据结构1.1线性表的实现(顺序存储结构)

    一 1 顺序表的优点 1 存储空间连续 方便随时访问 2 结构简单 易于理解 3 易于尾插或尾删和修改 2 顺序表的缺点 1 顺序存储空间容易溢出 不便扩充 2 插入和删除必须移动大量元素 二 顺序表的定义 1 数组静态分配 一开始就定下大
  • RocksDB介绍:一个比LevelDB更彪悍的引擎

    关于LevelDB的资料网上还是比较丰富的 如果你尚未听说过LevelDB 那请稍微预习一下 因为RocksDB实际上是在LevelDB之上做的改进 本文主要侧重在架构上对RocksDB对LevelDB改进的地方做个简单介绍并添加一些个人的
  • 理解MVC设计架构以及通过jsp、servlet访问数据库,前后端交互实现简单的注册、登录

    文章目录 前言 一 项目搭建 二 业务逻辑 1 注册 2 登录 3 basedao 三 效果展示 1 注册 2 注册 3 登录成功 4 显示信息 四 总结 五 心得体会 前言 经过大概6周的时间刷完Java SE Java 也叫Jakart
  • 【RuoYi-Vue-Plus】学习笔记 12 - Sa-Token(二)通过注解校验用户权限(Sa-Token 源码)

    文章目录 前言 参考目录 代码分析 前言 上一篇文章主要介绍了 Sa Token 登录认证流程 本篇文章是对于权限注解的校验流程分析 参考目录 Sa Token 官方文档 代码分析 请求接口 TestDemoController list
  • internet 连接共享已经被网络管理员禁用

    感谢 link 打开window菜单 gt 输入 regedit gt 找到这个键值 HKEY LOCAL MACHINE SOFTWARE Policies Microsoft Windows Network Connections gt
  • python_docx制作word文档详细使用说明

    在实习工作中 遇到用python制作word模板的任务 其实说白了就是python docx的使用 目前网上对这一个库的介绍得很少 很零散 所以很多功能我是尽量参考其官网 但是官网上面很多功能目前只有说明文档 而代码并还没有及时更新 以至于