热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonword自动办公_lt;自动化办公gt;Python操控Word

虽然Word不好用,但还必须得用它,python-docx是专门用于编辑Word文档的一个工具库,它有两大用途,自动化生成word文档and自动化修改文档pythonword1.自

虽然Word不好用, 但还必须得用它, python-docx是专门用于编辑Word文档的一个工具库, 它有两大用途, 自动化生成word文档 and 自动化修改文档

python word

1. 自定义样式

自定义样式

python可以自定义三类样式段落样式

字符样式

表格样式(一般用不到)这三类样式的创建方式基本一致, 只是创建参数 略有不同(1为段落样式, 2为字符样式, 3为表格样式)

以设置段落样式为例# 创建自定义段落样式(第一个参数为样式名, 第二个参数为样式类型, 1为段落样式, 2为字符样式, 3为表格样式)

UserStyle1 = document.styles.add_style('UserStyle1', 1)    # 设置字体尺寸

UserStyle1.font.size = Pt(40)    # 设置字体颜色

UserStyle1.font.color.rgb = RGBColor(0xff, 0xde, 0x00)    # 居中文本

UserStyle1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    # 设置中文字体

UserStyle1.font.name = '微软雅黑'

UserStyle1._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')

2.理解结构关系

结构关系往文档中插入文本内容, 首先要插入一个段落, 段落后面可追加字符, 但文档不能直接插入字符

段落之间会自动以 回车符号 分隔

段落 和 字符 可 各自设置独立的样式

实例: 插入段落, 插入段落后追加字符# 使用自定义段落样式

document.add_paragraph('自定义段落样式', style = UserStyle1)    # 使用自定义字符样式

document.add_paragraph('').add_run('正月里采花无哟花采,二月间采花花哟正开,二月间采花花哟正开。三月里桃花红哟似海,四月间葡萄架哟上开,四月间葡萄架哟上开。', style = UserStyle2)

3. 插入图片python-docx支持将图片插入文档, 且可以设置图片大小

插入图片

实例代码:document.add_picture('少女17087938.jpg', width=Inches(5))

4.插入列表

插入列表

插入有序列表document.add_paragraph('把冰箱门打开', style='List Number')    document.add_paragraph('把大象装进去', style='List Number')    document.add_paragraph('把冰箱门关上', style='List Number')

插入无序列表document.add_paragraph('天地匆匆 惊鸿而过 路有千百个', style='List Bullet')    document.add_paragraph('遑遑无归 闲云逸鹤 人间红尘过', style='List Bullet')    document.add_paragraph('引势而流 鸿门乱局 各有各选择', style='List Bullet')    document.add_paragraph('乾震坎艮 坤巽离兑 定一切生克', style='List Bullet')

5.插入表格

插入表格把表格看做二维数组, 然后往数组中填数据rows_num = 5

cols_num = 6

table = document.add_table(rows=rows_num, cols=cols_num, style = 'Table Grid')    for r in range(rows_num):        for c in range(cols_num):

table.cell(r, c).text = "第{r}行{c}列".format(r = r+1, c = c+1)

完整源码:from docx import Documentfrom docx.shared import Inchesfrom docx.dml.color import ColorFormatfrom docx.shared import Ptfrom docx.shared import RGBColorfrom docx.oxml.ns import qnfrom docx.enum.style import WD_STYLE_TYPEfrom docx.enum.text import WD_ALIGN_PARAGRAPHdef main():

# 创建文档对象

document = Document()    # 设置默认字体

document.styles['Normal'].font.name = '微软雅黑'

document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')

# 创建自定义段落样式(第一个参数为样式名, 第二个参数为样式类型, 1为段落样式, 2为字符样式, 3为表格样式)

UserStyle1 = document.styles.add_style('UserStyle1', 1)    # 设置字体尺寸

UserStyle1.font.size = Pt(40)    # 设置字体颜色

UserStyle1.font.color.rgb = RGBColor(0xff, 0xde, 0x00)    # 居中文本

UserStyle1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    # 设置中文字体

UserStyle1.font.name = '微软雅黑'

UserStyle1._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')

# 创建自定义字符样式(第一个参数为样式名, 第二个参数为样式类型, 1为段落样式, 2为字符样式, 3为表格样式)

UserStyle2 = document.styles.add_style('UserStyle2', 2)    # 设置字体尺寸

UserStyle2.font.size = Pt(15)    # 设置字体颜色0c8ac5

UserStyle2.font.color.rgb = RGBColor(0x0c, 0x8a, 0xc5)    # 设置段落样式为宋体

UserStyle2.font.name = '宋体'

UserStyle2._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')    # 使用自定义段落样式

document.add_paragraph('自定义段落样式', style = UserStyle1)    # 使用自定义字符样式

document.add_paragraph('').add_run('正月里采花无哟花采,二月间采花花哟正开,二月间采花花哟正开。三月里桃花红哟似海,四月间葡萄架哟上开,四月间葡萄架哟上开。', style = UserStyle2)    # 设置粗体字

document.add_paragraph('设置粗体字:').add_run('粗体字').bold = True

# 设置斜体字

document.add_paragraph('设置斜体字:').add_run('斜体字').italic = True

# 设置字号50

document.add_paragraph('设置字号50:').add_run('50').font.size = Pt(50)    # 设置字体颜色为 af2626

document.add_paragraph('设置字体颜色:').add_run('颜色').font.color.rgb = RGBColor(0xaf, 0x26, 0x26)    # 样式叠加: 将字体改到30号并且将字体改成特定颜色;

doubleStyle =  document.add_paragraph('同时设置文字颜色和字号:').add_run('颜色和尺寸')

doubleStyle.font.size = Pt(30)

doubleStyle.font.color.rgb = RGBColor(0xaf, 0x26, 0x26)    # 添加分页符

document.add_page_break()    # 创建 有序列表

document.add_paragraph('').add_run('有序列表').font.size = Pt(30)

document.add_paragraph('把冰箱门打开', style='List Number')

document.add_paragraph('把大象装进去', style='List Number')

document.add_paragraph('把冰箱门关上', style='List Number')    # 创建 无序列表

document.add_paragraph('').add_run('无序列表').font.size = Pt(30)

document.add_paragraph('天地匆匆 惊鸿而过 路有千百个', style='List Bullet')

document.add_paragraph('遑遑无归 闲云逸鹤 人间红尘过', style='List Bullet')

document.add_paragraph('引势而流 鸿门乱局 各有各选择', style='List Bullet')

document.add_paragraph('乾震坎艮 坤巽离兑 定一切生克', style='List Bullet')    # 添加分页符

document.add_page_break()    # 添加图片

document.add_paragraph('').add_run('添加图片').font.size = Pt(30)

document.add_picture('少女17087938.jpg', width=Inches(5))    # 添加分页符

document.add_page_break()

document.add_paragraph('').add_run('创建表格').font.size = Pt(30)    # 创建两行两列的表格

rows_num = 5

cols_num = 6

table = document.add_table(rows=rows_num, cols=cols_num, style = 'Table Grid')    for r in range(rows_num):        for c in range(cols_num):

table.cell(r, c).text = "第{r}行{c}列".format(r = r+1, c = c+1)    # 保存文档

document.save('Python生成的文档.docx')if __name__ == '__main__':

main()将源码保存为单独的python文件后,安装python-docx, 找一张图片,命名为少女17087938.jpg, 将图片与python文件放到同一个目录, 然后再python3环境下运行python文件即可!  最后附测试图片一张:

少女17087938.jpg

最终效果:

最终效果.png

自动化修改文档保留格式并替换实例: 将当前目录下, 所有docx文件内的"海南大学", 替换为"Hainan University", 并将新文件添加前缀new后, 保存到当前目录下

转换前

转换后终端打印import docximport osimport re# 传入三个参数, 旧字符串, 新字符串, 文件对象def replace_text(old_text, new_text, file):

# 遍历文件对象

for f in file.paragraphs:        # 如果 旧字符串 在 某个段落 中

if old_text in f.text:

print("替换前:", f.text)            # 将段落存入 inline

inline = f.runs            # 遍历 段落 生成 i

for i in inline:                # 如果 旧字符串 在 i 中

if old_text in i.text:                    # 替换 i.text 内文本资源

text = i.text.replace(old_text, new_text)

i.text = text

print("替换后===>", f.text)def main():

# 获取当前目录下所有的文件名列表

old_file_names = os.listdir()    # 获取所有docx文件名列表

docx_file_names = []    for old_file_name in old_file_names:        if re.match(r'^[^~].*\.docx', old_file_name):

print(old_file_name)

docx_file_names.append(old_file_name)    for docx_file_name in docx_file_names:        try:            # 获取文件对象

file=docx.Document(docx_file_name)            # 三个参数: 旧的字符串, 新的字符串, 文件对象

print("开始替换:", docx_file_name)

replace_text('海南大学', 'Hainan University', file)

file.save('new_'+docx_file_name)

print(docx_file_name, "替换成功")        except:

print(docx_file_name, "替换失败")            passif __name__ == '__main__':

main()



推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有