# pip install python-docx
def first():
from docx import Document
doc1 = Document()
doc1.add_heading('如何使用 Python 创建和操作 Word', 0)
doc1.save('./办公自动化/files/word.docx')
def start1():
from docx import Document
doc1 = Document()
# 标题操作
doc1.add_heading('如何使用 Python 创建和操作 Word', 0)
doc1.add_heading('Python 操作 Word 1级标题', level=1)
doc1.add_heading('Python 操作 Word 2级标题', level=2)
doc1.add_heading('Python 操作 Word 3级标题', level=3)
# doc1.add_page_break() # 分页
# 增加段落
doc1.add_paragraph('这个是段落内容', )
doc1.add_paragraph('这个是段落内容', 'Title') # 等于0级标题
doc1.add_paragraph(
' Python是一门计算机程序编程语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。是一种解释型脚本语言。它是由荷兰人吉多·范罗苏姆所发明的。')
paragraph = doc1.add_paragraph(
' Python是一门计算机程序编程语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。是一种解释型脚本语言。它是由荷兰人吉多·范罗苏姆所发明的。')
# 在段落后面增加内容
paragraph.add_run('在段落后面增加内容!')
# 增加无序列表
doc1.add_paragraph('哪个不是动物:')
doc1.add_paragraph('喜羊羊', style='List Bullet')
doc1.add_paragraph('懒羊羊', style='List Bullet')
doc1.add_paragraph('沸羊羊', style='List Bullet')
doc1.add_paragraph('美羊羊', style='List Bullet')
doc1.add_paragraph('灰太狼', style='List Bullet')
# 增加有序列表
doc1.add_paragraph('今年的学习计划:')
doc1.add_paragraph('Python', style='List Number')
doc1.add_paragraph('HTML', style='List Number')
doc1.add_paragraph('JS', style='List Number')
doc1.add_paragraph('CSS', style='List Number')
# 增加引用
doc1.add_paragraph('这个是引用', style='Intense Quote')
# 增加图片
from docx.shared import Inches # 英寸
# doc1.add_picture('D:\\git-python\\前端\\static\\img\\haha.png')
# doc1.add_picture('D:\\git-python\\前端\\static\\img\\haha.png', width=Inches(5)) # 配置图片宽度为5英寸
# 配置图片适应文档宽度
pic = doc1.add_picture('D:\\git-python\\前端\\static\\img\\haha.png')
height = pic.height
width = pic.width
page_width = doc1.sections[0].page_width # 获取整个文档宽度
page_left = doc1.sections[0].left_margin # 页面左边页边距
doc_width = page_width - (page_left * 2) # 文档内容实际宽度
print(page_width, page_left, doc_width) # 7772400 1143000 5486400
sc = height/width # 计算图片高宽比
pic.width = doc_width # 配置图片宽度
pic.height = int(doc_width * sc)
# 增加表格
table = doc1.add_table(rows=1, cols=3)
cells = table.rows[0].cells
cells[0].text = '编号'
cells[1].text = '姓名'
cells[2].text = '职业'
data = [
[1, '吕小布', '将军'],
[2, '诸葛亮', '军师'],
[3, '刘备', '主公']
]
for i, n, w in data:
cells = table.add_row().cells
cells[0].text = str(i)
cells[1].text = n
cells[2].text = w
doc1.save('./办公自动化/files/word.docx')
def use_style():
from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
doc1 = Document()
h1 = doc1.add_heading('', 0)
h1.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中
h = h1.add_run('如何使用 Python 创建和操作 Word')
h.font.size = Pt(28)
# 段落字段样式
p1 = doc1.add_paragraph('')
p = p1.add_run('这是段落1:\n')
p.font.size = Pt(28)
p.bold = True
p.font.shadow = True
p.font.color.rgb = RGBColor(205, 51, 51)
p1.add_run('这是内容1.1 # 粗体\n').bold = True # 粗体
p1.add_run('这是内容1.2 # 斜体\n').italic = True # 斜体
p1.add_run('这是内容1.3 # 字体大小\n').font.size = Pt(26) # 字体大小
p1.add_run('这是内容1.4 # 中划线\n').font.strike = True # 中划线
p1.add_run('这是内容1.5 # 下划线\n').font.underline = True # 下划线
p1.add_run('这是内容1.6 # 阴影\n').font.shadow = True # 阴影
p1.add_run('这是内容1.7 # 颜色\n').font.color.rgb = RGBColor(238, 118, 33) # 颜色
p1.add_run('Test font style 1.8 \n').font.name = '微软雅黑'
run = p1.add_run('测试字体 1.9 \n')
run.font.name = ''
run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
# 段落格式
p2 = doc1.add_paragraph('')
p2.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中
# 对齐方式为居中,没有这句话默认左对齐。另外右对齐:RIGHT,两端对齐:JUSTIFY,分散对齐:DISTRIBUTE
p = p2.add_run('这是段落2\n')
p.font.size = Pt(28)
p.bold = True
p.font.shadow = True
p.font.color.rgb = RGBColor(139, 28, 98)
# 缩进
p3 = doc1.add_paragraph()
p3.add_run('Python是一门计算机程序编程语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。是一种解释型脚本语言。它是由荷兰人吉多·范罗苏姆所发明的。')
p3.paragraph_format.left_indent = Inches(0.5) # 整体缩进 0.5英寸约缩进四个中文字符空格
p4 = doc1.add_paragraph('')
run = p4.add_run(
'Python是一门计算机程序编程语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。是一种解释型脚本语言。它是由荷兰人吉多·范罗苏姆所发明的。')
p4.paragraph_format.first_line_indent = Inches(0.25) # 首行缩进
# 段落间距
last_paragraph = doc1.paragraphs[-1] # 获取最后一个段落
p4.paragraph_format.space_after = Pt(24) # 设置段后间距为24点(大约1.5行)
p4.paragraph_format.space_before = Pt(24) # 设置段前间距为24点(大约1.5行)
# p4.paragraph_format.space_within = Pt(24) # 设置段落内
# 行距
p4.paragraph_format.line_spacing = 1.5 # 行距
doc1.save('./办公自动化/files/word.docx')
def default_style():
from docx import Document
from docx.shared import Pt
from docx.oxml.ns import qn
# 创建一个新的Word文档
doc = Document()
# 设置中文字体
doc.styles['Normal'].font.name = '宋体'
doc.styles['Normal'].font.size = Pt(25)
doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
# 添加中英文内容
doc.add_paragraph('这是一段中文内容')
doc.add_paragraph('This is an English paragraph')
# 循环修改所有runs字体大小
for paragraph in doc.paragraphs:
paragraph.style = doc.styles['Normal']
for run in paragraph.runs:
run.font.size = Pt(10)
# 保存文档
doc.save('./办公自动化/files/word.docx')
def test():
from docx import Document # 导入docx包
from docx.shared import Cm, Inches, Pt, RGBColor # 导入单位换算函数
document = Document('./办公自动化/files/word.docx') # 新建word文档
section = document.sections[0] # 获取section对象
# 修改页面大小
# print('默认页面的宽度和高度:', section.page_width.cm,section.page_height.cm) # 打印默认页面宽度和高度
# section.page_width = Cm(40)
# section.page_height = Cm(40)
# print('修改后页面的宽度和高度:', section.page_width.cm, section.page_height.cm) # 打印修改后的页面宽度和高度
# 修改页边距
print('上页边距:下页边距:左页边距:右页边距:', section.top_margin, section.bottom_margin,
section.left_margin, section.right_margin) # :上页边距#:下页边距#:左页边距#:右页边距
section.top_margin = Cm(1.27)
section.bottom_margin = Cm(1.27)
section.left_margin = Cm(1.27)
section.right_margin = Cm(1.27)
print('上页边距:下页边距:左页边距:右页边距:', section.top_margin, section.bottom_margin,
section.left_margin, section.right_margin) # :上页边距#:下页边距#:左页边距#:右页边距
# 设置页面大小
document.sections[0].page_height = Cm(29.7) # 设置A4纸的高度
document.sections[0].page_width = Cm(21) # 设置A4纸的宽
# 修改纸张方向
# from docx.enum.section import WD_ORIENTATION
# WD_ORIENTATION.LANDSCAPE:纸张方向为横向。
# WD_ORIENTATION.PORTRAIT:纸张方向为纵向。
# section.orientation = WD_ORIENTATION.LANDSCAPE
# 设置分栏
# from docx.oxml.ns import qn
# section._sectPr.xpath('./w:cols')[0].set(qn('w:num'), '2') #设置为2栏
# 设置页眉页脚
# header = section.header # 获取第一个节的页眉
# print('页眉中默认段落数:', len(header.paragraphs))
# paragraph = header.paragraphs[0] # 获取页眉的第一个段落
# paragraph.add_run('这是第一节的页眉2') # 添加页面内容
# footer = section.footer # 获取第一个节的页脚
# paragraph = footer.paragraphs[0] # 获取页脚的第一个段落
# paragraph.add_run('这是第一节的页脚2') # 添加页脚内容
# 段落样式修改
# 新增加一段段落
# paragraph = document.add_paragraph('这是一个新的段落\n 这又是一个段落哦')
# 设置段落间距
# space_before,space_after 上下间距
# line_spacing,line_spacing_rule 行距
# paragraph_format=paragraph.paragraph_format
# paragraph_format.space_before=Pt(0) #上行间距
# paragraph_format.space_after=Pt(0) #下行间距
# paragraph_format.line_spacing=1.15 #行距
# from docx.enum.text import WD_LINE_SPACING
# ONE_POINT_FIVE,1.5倍行距
# AT_LEAST,最小行距
# DOUBLE,双倍行距
# EXACTLY,固定值
# MULTIPLE,多倍行距
# SINGL,单倍行距
# paragraph_format.line_spacing_rule = WD_LINE_SPACING.ONE_POINT_FIVE
# 整体样式调整
from docx.oxml.ns import qn
document.styles['Normal'].font.name = u'宋体'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
document.styles['Normal'].font.size = Pt(10.5)
document.styles['Normal'].font.color.rgb = RGBColor(0, 80, 0)
# 标题样式调整
# 标题等级0-9这些数字,一级标题二级标题这样
Head = document.add_heading("", level=1) # 这里不填标题内容
run = Head.add_run("真正要填写的标题")
run.font.name = u'Cambria'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'Cambria')
run.font.color.rgb = RGBColor(0, 0, 0)
import docx
Head.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.CENTER # 设置为居中
# 段落字体样式
from docx.enum.style import WD_STYLE_TYPE
from docx.oxml.ns import qn
page = document.add_paragraph('这是一个段落')
run = page.add_run('这是一个段落')
run.font.name = '微软雅黑' # 字体名称
run.font.size = Pt(50) # 字体大小
run.font.color.rgb = RGBColor(0, 0, 0) # 字体颜色
# 关闭孤行控制
document.styles['Normal'].paragraph_format.widow_control = False
from docx.enum.dml import MSO_THEME_COLOR_INDEX, MSO_COLOR_TYPE
# 内置颜色
# BACKGROUND_1、BACKGROUND_2、TEXT_1、TEXT_2、ACCENT_1、ACCENT_2、ACCENT_3、ACCENT_4、ACCENT_5和ACCENT_6
run.font.color.theme_color = MSO_THEME_COLOR_INDEX.ACCENT_1 # 设置字体主题颜色
run.font.highlight_color = MSO_THEME_COLOR_INDEX.DARK_1 # 设置高亮背景颜色
# 加粗
# run.bold = True
# 斜体
# run.font.italic = True
# 设置下划线
# run.font.underline = True
# 设置轮廓线
# run.font.outline = True
# 设置阴影
# run.font.shadow = True
# 删除线
# run.font.strike = True
# 双删除线
# run.font.double_strike = True
# 设置下标
# run.font.subscript = True
# 设置上标
# run.font.superscript = True
# 结束保存
document.save('./办公自动化/files/word.docx') # 保存word文档
"""
# 字号'八号'对应磅值5
# 字号'七号'对应磅值5.5
# 字号'小六'对应磅值6.5
# 字号'六号'对应磅值7.5
# 字号'小五'对应磅值9
# 字号'五号'对应磅值10.5
# 字号'小四'对应磅值12
# 字号'四号'对应磅值14
# 字号'小三'对应磅值15
# 字号'三号'对应磅值16
# 字号'小二'对应磅值18
# 字号'二号'对应磅值22
# 字号'小一'对应磅值24
# 字号'一号'对应磅值26
# 字号'小初'对应磅值36
# 字号'初号'对应磅值42
"""
def get_docx(file):
from docx import Document
# 读取docx
document = Document(file)
for i in document.paragraphs:
print(i.text)
# 如果存在表格
for t in document.tables:
for rows in t.rows:
for cell in rows.cells:
print(cell.text)
if __name__ == '__main__':
# first()
# start1()
# use_style()
# default_style()
get_docx('./办公自动化/files/违章通知书.docx')