#coding=utf-8
#安装包 python-docx
#举例1、写入简单段落
import docx
#创建word文档对象
file=docx.Document()
#添加段落
file.add_paragraph("床前明月光")
file.add_paragraph("疑是地上霜")
file.add_paragraph("举头望明月")
file.add_paragraph("低头思故乡")
#保存至word文档
file.save("test1.docx")

test1-docx.png
#举例2、插入表格并填充内容、设置对齐方式
import docx
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT #用来设置单元格水平对齐方式
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT #用来设置单元格垂直对齐方式
from docx import shared
from docx.shared import Cm,Inches,Pt #用来设置单元格内元素的宽高
#创建word文档对象
doc=docx.Document()
table=doc.add_table(5,5) #定义表格对象 5行5列
table.cell(0,0).text='123' #在第一行第一列单元格插入字符123,注:表格都是从0开始计数
table.cell(0,1).text='456' #在第一行第二列单元格插入字符456,注:表格都是从0开始计数
#设置第一行第一列单元格水平居中|左对齐|右对齐
table.cell(0,0).paragraphs[0].paragraph_format.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER|WD_PARAGRAPH_ALIGNMENT.LEFT|WD_PARAGRAPH_ALIGNMENT.RIGHT
#设置第一行第二列单元格垂直居中|顶部对齐|底部对齐
table.cell(0,1).vertical_alignment=WD_CELL_VERTICAL_ALIGNMENT.CENTER|WD_CELL_VERTICAL_ALIGNMENT.TOP|WD_CELL_VERTICAL_ALIGNMENT.BOTTOM
#在以下单元格第一行第三列的单元格中插入图片,并设置宽度为5cm。注:当只设置图片一个方向的尺寸(宽或高),另一个方向的只存会自动进行缩放
table.cell(0,2).paragraphs[-1].add_run().add_picture("1.jpg",width=shared.Cm(5))
#在以下单元格第一行第四列的单元格中插入图片,并设置高度为5英寸。注:当只设置图片一个方向的尺寸(宽或高),另一个方向的只存会自动进行缩放
table.cell(0,3).paragraphs[-1].add_run().add_picture("2.jpg",height=shared.Inches(5))
doc.save("test2.docx")

test2-docx.png
#举例3、设置页面布局
'''
页面方向有横向与竖向,新建Document时,默认的是竖向页面,要设置为我们目标的横向,需要设置设置三个参数:
section.orientation、section.page_width、section.page_height
注:如果只设置了参数section_orientation=WD_ORIENT.LANDSCAPE,不设置另外两个参数,页面方向并不发生变化。
如果设置了section.page_width、section.page_height两个参数,不设置section.orientation页面会根据前两个参数设置页面尺寸进行调整。
'''
import docx
from docx.shared import Cm,Inches,Pt #用来设置单元格内元素的宽高
from docx.enum.section import WD_ORIENTATION #用来设置章节的横向或纵向
doc=docx.Document() #创建word文档对象
sec=doc.sections #获取word文档对象章节列表,新建的文档默认只有一节
sec0=sec[0] #取第一节并命名为sec0
'''
新建的文档默认为竖向,改为横向须设置三个参数
设置页面方向为横向必须同时设置高度和宽度才有用
若只设置sec0.orientation而不设置宽和高,则方向发生变化.(LANDSCAPE-横向)
若只设置了宽和高,不设置sec0.orientation,则页面的宽和高会改变,但仍为纵向.
'''
sec0.orientation=WD_ORIENTATION.LANDSCAPE
sec0.page_width=Cm(21)
sec0.page_height=Cm(30)
sec0.left_margin=Cm(1)
sec0.right_margin=Cm(1)
sec0.top_margin=Cm(1)
sec0.bottom_margin=Cm(1)
table=doc.add_table(5,5) #定义表格对象 5行5列
table.cell(0,0).text='123' #在第一行第一列单元格插入字符123
table.cell(1,0).text='456'
table.cell(0,1).text='789'
doc.save("test3.docx")

test3-docx.png
#举例4、将一个文件夹中的图片以列表形式排列在word中
import os
imagepath="./picture/"
imagelist=os.listdir(imagepath)
print(imagelist)
import docx
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT #用来设置单元格水平对齐方式
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT #用来设置单元格垂直对齐方式
from docx import shared
from docx.shared import Cm,Inches,Pt #用来设置单元格内元素的宽高
from docx.enum.section import WD_ORIENTATION #用来设置章节的横向或纵向
doc=docx.Document()
sec=doc.sections
sec0=sec[0]
sec0.orientation=WD_ORIENTATION.LANDSCAPE
sec0.page_width=Cm(21)
sec0.page_height=Cm(29.7)
sec0.left_margin=Cm(1)
sec0.right_margin=Cm(1)
sec0.top_margin=Cm(1)
sec0.bottom_margin=Cm(1)
rowNums=eval(input("请输入图片列表转成的行数:"))
colNums=eval(input("请输入图片列表转成的列数:"))
table=doc.add_table(rowNums*3,colNums+1)
for row in range(rowNums+1):
for col in range(colNums+1):
try:
imageName=imagelist[row*3+col]
print("#####")
print(imageName)
print(imagepath+imageName)
print((row*2,col))
table.cell(row*2, col).paragraphs[0].paragraph_format.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER
table.cell(row*2, col).vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER
table.cell(row*2+1, col).paragraphs[0].paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
table.cell(row*2+1, col).vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER
table.cell(row*2,col).text=imageName
table.cell(row*2+1,col).paragraphs[-1].add_run().add_picture(imagepath+imageName,width=shared.Cm(2))
except:
pass #如果有其它类型的文件则忽略
doc.save("test4.docx")
结果:
['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.jpg', '9.jpg']
请输入图片列表转成的行数:2
请输入图片列表转成的列数:2
#####
1.jpg
./picture/1.jpg
(0, 0)
#####
2.jpg
./picture/2.jpg
(0, 1)
#####
3.jpg
./picture/3.jpg
(0, 2)
#####
4.jpg
./picture/4.jpg
(2, 0)
#####
5.jpg
./picture/5.jpg
(2, 1)
#####
6.jpg
./picture/6.jpg
(2, 2)
#####
7.jpg
./picture/7.jpg
(4, 0)
#####
8.jpg
./picture/8.jpg
(4, 1)
#####
9.jpg
./picture/9.jpg
(4, 2)

test4-docx.png