Python实现自动化办公:Python对Word文档的基本操作(python-docx)

Posted 笠li笠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python实现自动化办公:Python对Word文档的基本操作(python-docx)相关的知识,希望对你有一定的参考价值。

Python对Word的基本操作

一、docx模块

1、官方文档

docx python库官方文档:python-docx 0.8.11 documentation

2、安装docx模块

pip3 install python-docx

注意:

此处安装不是pip3 install docx,如若使用pip3 install docx,则会出现以下报错。

  File "D:\\python\\lib\\site-packages\\docx.py", line 30, in <module>
    from exceptions import PendingDeprecationWarning
ModuleNotFoundError: No module named 'exceptions'
# ModuleNotFoundError:没有名为“exceptions”的模块

解决方法:
卸载之前安装的docx:pip3 uninstall docx
重新安装python-docx模块:pip3 install python-docx

二、基本函数的使用方法

1、读取

获取Word文档:document = Document('xx.docx')
获取所有段落:paras= document.paragraphs
获取段落内容:txt = para.text
获取所有行:runs = para.runs
获取行内容:run_txt = run.text
获取所有表格:tables = document.tables
获取表格中的所有行:rows = table.rows
获取行的所有单元格:cells = row.cells
获取单元格的值:txt = cell.text

2、写入

设置文档的基础字体:document.styles['Normal'].font.name = 'xx'
设置中文字体:document.styles['Normal'].element.rPr.rFonts.set(qn('w:eastAsia'),'xx')
插入图片:document.add_picture('图片',width=Inches(num)) # 英寸
插入表格:table = document.add_table(rows=num,cols=num,style='Table Grid') # 行、列、格式
添加表格内容(单元格):table.cell(x,y).text = 'xx'
合并表格单元格:table.cell(x1,y1).merge(table.cell(x2,y2)) # 左上角坐标,右下角坐标
初始化段落:para = document.add_paragraph()
设置对齐:para.alignment = 'xx'
设置段前间距:para.space_after = Pt(num)
设置段后间距:para.space_before = Pt(num)
添加行至段落:run = para.add_run('xx')
设置行字体:run.font.name = 'xx'
设置中文字体:run.element.rPr.rFonts.set(qn('w:eastAsia'),'xx')
设置行字体大小:run.font.size = Pt(num)
设置行字体是否加粗:run.bold = True # 是:True 否:False
添加分页符:document.add_page_break()
保存文档:document.save('xx.docx')
Python库设置对齐的对应方法:

设置段落格式功能
WD_ALIGN_PARAGRAPH.CENTER水平居中对齐
WD_ALIGN_PARAGRAPH.LEFT左对齐
WD_ALIGN_PARAGRAPH.RIGHT右对齐

三、使用案例

1、读取段落和行

Word文档内容:

符号↓即为换行,回车即为段落

代码如下:

from docx import Document   # 可用于Word文档的定义

document = Document('python.docx')   #获取Word文档
paras= document.paragraphs   # 获取所有段落

for para in paras:     # 获取每一个段落
  txt = para.text      # 获取每一个段落的内容
  print(txt,'\\n')
print('#------------------------#')
for para in paras:        # 获取每个段落
  for run in para.runs:   # 获取段落的每一行
    run_txt = run.text    # 获取每一行的内容
    print(run_txt,'\\n')

效果如下图所示:

2、读取表格

Word文档内容:

使用docx库读取word表格首先要定位其中一个表格,然后获取表格的行,再获取表格中每个单元格的内容。操作方法类似于对Excel的遍历。在此篇博客中的openpyxl遍历Excel工作表(或指定区域)有记录遍历方法:Python实现自动化办公(一):Python对Excel的基本操作
代码如下:

from docx import Document   # 可用于Word文档的定义

document = Document('python.docx')   #获取Word文档
tables = document.tables   # 获取Word文档中的所有表格

for table in tables:   # 遍历表格
  for row in table.rows:   # 遍历表格的行
      for cell in row.cells:   # 遍历行的所有单元格
          txt = cell.text   # 获取单元格的值
          print(txt,end = '   ')
      print('\\n')

效果如下:

3、写入word

1、导包

常用的方法:

from docx import Document   # 可用于Word文档的定义
from docx.enum.text import WD_ALIGN_PARAGRAPH   # 可用于定义格式
from docx.shared import Pt   # 可用于定义间距或字体格式(磅数)
from docx.oxml.ns import qn   # 可用于设置中文格式
from docx.shared import Inches   # 可用于设置图片尺寸

2、案例

代码如下:

from docx import Document   # 可用于Word文档的定义
from docx.enum.text import WD_ALIGN_PARAGRAPH   # 可用于定义格式
from docx.shared import Pt   # 可用于定义间距或字体格式(磅数)
from docx.oxml.ns import qn   # 可用于设置中文格式
from docx.shared import Inches   # 可用于设置图片尺寸

document = Document()

document.styles['Normal'].font.name = '宋体'   # 设置文档的基础字体
document.styles['Normal'].element.rPr.rFonts.set(qn('w:eastAsia'),'宋体')

para_one = document.add_paragraph()   # 初始化第一个自然段
para_one.alignment = WD_ALIGN_PARAGRAPH.CENTER
run_1 = para_one.add_run('Python')   # 添加行至第一段(题目)
run_1.font.size = Pt(22)   # 设置大小
run_1.bold = True   # 设置粗体

para_two = document.add_paragraph()   # 初始化第二个自然段
run_2 = para_two.add_run('CSDN:')   # 添加行至第二段 
run_2.font.size = Pt(15)   # 设置大小

table = document.add_table(rows=2,cols=2,style='Table Grid')   # 插入表格
#添加单元格内容
table.cell(0,0).text = 'Word'
table.cell(0,1).text = '对应库'
table.cell(1,0).text = 'Python'
table.cell(1,1).text = 'python-docx'

para_three = document.add_paragraph()   # 初始化第三个自然段

para_four = document.add_paragraph()   # 初始化第四个自然段
para_four.alignment = WD_ALIGN_PARAGRAPH.CENTER
run_4 = para_four.add_run('人生苦短,我学Python')   # 添加行至第二段 
run_4.font.size = Pt(22)   # 设置大小

document.add_page_break()   # 添加分页符

document.add_picture('picture.jpg',width=Inches(5))   # 插入图片

document.save('python.docx')

效果如下:

我是一名学生,目前正在学习中,本篇文章是我的学习笔记,如有错误的话还请指正。

以上是关于Python实现自动化办公:Python对Word文档的基本操作(python-docx)的主要内容,如果未能解决你的问题,请参考以下文章

Python实现办公自动化读书笔记——自动化处理Word文档

最全总结 | 聊聊 Python 办公自动化之 Word(上)

4办公自动化Python实现Word转PDF

python自动化高效办公第二期,带你项目实战{excel数据处理批量化生成word模板pdf和ppt等自动化操作}

Python自动化办公实现excel表中的数据批量导入到word指定位置(表格形式和下滑线形式)

Python自动化办公实现excel表中的数据批量导入到word指定位置(表格形式和下滑线形式)