在实习工作中,遇到用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')
运行结果如下:

python操作docx入门教程相关推荐

  1. Py的docx库:Python操作docx文件的详细教程

    Py的docx库:Python操作docx文件的详细教程 docx库是一种Python库,它使得在Python中提取.编辑和创建Microsoft Word 2007 .docx文件变得容易.这个库具 ...

  2. python 科学计算基础教程电子版-终于领会python科学计算入门教程

    PyQt5是基于Digia公司强大的图形程式框架Qt5的python接口,由一组python模块构成.PyQt5本身拥有超过620个类和6000函数及方法.在可以运行于多个平台.PyQt5拥有双重协议 ...

  3. Python 数据科学入门教程:机器学习:回归

    Python 数据科学入门教程:机器学习:回归 原文:Regression - Intro and Data 译者:飞龙 协议:CC BY-NC-SA 4.0 引言和数据 欢迎阅读 Python 机器 ...

  4. Python新手基础入门教程:如何像面试官展示你的coding能力

    Python新手基础入门教程:如何像面试官展示你的coding能力 作为程序员,我们通常在面试的时候面试官会出一些题来让你解决,作为优秀的程秀员,除了需要具备解决问题的思路以外,代码的质量也很关键.因 ...

  5. 视频教程-Python零基础入门教程-Python

    Python零基础入门教程 从2012年从事互联网至今有7年软件编程经验,曾任职国内北京互联网公司,中南林业大学授课Python 现任逻辑教育Python课程负责人,精通Python语言,精通人工智能 ...

  6. 用python写脚本看什么书-终于知晓python编写脚本入门教程

    PyQt5是基于Digia公司强大的图形程式框架Qt5的python接口,由一组python模块构成.PyQt5本身拥有超过620个类和6000函数及方法.在可以运行于多个平台.PyQt5拥有双重协议 ...

  7. python快速入门答案-总算懂得python脚本快速入门教程

    PyQt5是基于Digia公司强大的图形程式框架Qt5的python接口,由一组python模块构成.PyQt5本身拥有超过620个类和6000函数及方法.在可以运行于多个平台.PyQt5拥有双重协议 ...

  8. python快速编程入门教程-终于懂得python快速编程入门教程

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

  9. python自然语言处理入门教程(一)

    1.NLTK自然语言处理工具包 1.1 NLTK简介 NLTK是构建Python程序与人类语言数据工作的主要平台.它提供了易于使用的界面,以超过50语料库和词汇资源,如WordNet的,连同一套文字处 ...

最新文章

  1. YOLOV4各个创新功能模块技术分析(三)
  2. selenium之简单使用
  3. Rsync数据同步服务
  4. php中魔术方法的应用
  5. 《超越需求:敏捷思维模式下的分析》—第1章 1.1节简介
  6. Windows + IDEA + SBT 打造Spark源码阅读环境
  7. kuberneters dashboard认证及分级授权
  8. html京东快报,练习3:仿京东快报.html
  9. [转载] python 字符串(string)
  10. Linux无线网络实用工具Top 10
  11. 电容器单位及电容器单位换算
  12. (完美)华为P20pro CTL-AL00的usb调试模式在哪里打开的教程
  13. maya导入abc动画_带你直观了解三维动画设计
  14. php 实现公众号模板消息url 跳转
  15. 2021各厂免费云服务器申请攻略(阿里云/腾讯云/华为云)
  16. PHP 依赖注入 容器,PHP 依赖注入容器 Pimple 笔记
  17. c语言程序设计选修让我学到的东西,电子课程设计心得体会
  18. 用单片机的RAM虚拟U盘(文件系统:Fat16)
  19. 数据结构PTA 基础实验7-2.1 魔法优惠券
  20. 数学小游戏:原创字谜几则

热门文章

  1. 【以太坊源码】交易(一)
  2. 处理机调度的概念、层次
  3. Java-线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
  4. 关于js中replace()只能替换字符串中第一个对象的问题
  5. 物理层传输介质(双绞线、光纤等)
  6. 将数据插入SQL Server的方法
  7. sql server 视图_SQL Server –具有引用视图的开发实践
  8. Oracle 安全性一
  9. 读大道至简第五章有感
  10. 数据库设计优化经验谈(转载)