python在word文档里插入文件对象
工作需要制作每周一次的汇总报表,除了正文以外,还需要把上周的各种报表以附件的方式打包到报表里,有word文档,有excel表格,手工操作是这样的:插入-对象-由文件创建-勾选显示为图标-选择文件-确认,如图:
插入后效果,双击图标可以打开:
看似简单的工作,但是一共有12个文件,目录不全相同,每次选择要选一次目录,费时费力还容易搞错。想用python来解决问题,发现python-docx只能插入图片,不能插入文件对象,在网上泡了几天没能找到方法。
没办法只好自己动手,我们知道docx实际上是一个压缩文件,解压缩后分析,在word\embeddings找到了这些插入的文件(注意文件名):
那么是否可以替换掉这些文件然后再打包来达到我的目的,经过手工测试后发现行得通,下一步就是写代码了。
过程就不说了,绕了很多弯,碰了不少壁,现在分享一下心得和代码:
1.需要先制作word模版文件,要包含插入的文件对象,插入的文件对象可以是空文件,但是对象的文件名不能更改;
2.根据模版文件写入新word文件;
3.解压word文件;
4.替换掉word\embeddings的附件,注意顺序和文件名;
5.重新压缩还原word文件,这一步需要注意的是压缩格式,python zipfile包默认的格式office不认,要指定格定为DEFLATED。
下面是3-5步的代码:
#filename为相关文件列表,filename[0]就是需要处理的主word文件,filename[1]-[12]是12个需要插入的附件
import os,zipfile,shutil #需要用到的包
azip = zipfile.ZipFile(filename[[0]) #以压缩格式打开word文件
tempdir=''
while True:tempdir= ''.join(random.sample(string.ascii_letters + string.digits, 8)) #生行8位临时文件夹名if not os.path.exists(tempdir):break
os.mkdir(tempdir) #创建临时目录
os.chdir(tempdir) #转到临时目录
azip.extractall() #解压word文件到临时文件夹
azip.close() #关闭word文档,否则后面重新压缩会报错
#把正确文件拷贝覆盖模版文件的空附件
try:shutil.copy(filename[1],'word\\embeddings\\Microsoft_Excel____.xlsx')shutil.copy(filename[2],'word\\embeddings\\Microsoft_Excel____1.xlsx')shutil.copy(filename[3],'word\\embeddings\\Microsoft_Excel____2.xlsx')shutil.copy(filename[4],'word\\embeddings\\Microsoft_Excel____3.xlsx')shutil.copy(filename[5],'word\\embeddings\\Microsoft_Excel____4.xlsx')shutil.copy(filename[6],'word\\embeddings\\Microsoft_Word___.docx')shutil.copy(filename[7],'word\\embeddings\\Microsoft_Word___5.docx')shutil.copy(filename[8],'word\\embeddings\\Microsoft_Word___6.docx')shutil.copy(filename[9],'word\\embeddings\\Microsoft_Word___7.docx')shutil.copy(filename[10],'word\\embeddings\\Microsoft_Word___8.docx')shutil.copy(filename[11],'word\\embeddings\\Microsoft_Word___9.docx')shutil.copy(filename[12],'word\\embeddings\\Microsoft_Word___10.docx')azip = zipfile.ZipFile(filename[0], 'w') #以压缩格式新建word文档for i in os.walk('.'): #使用os.walk遍历整个目录及子目录,保证原有的目录结构不变for j in i[2]:azip.write(os.path.join(i[0],j), compress_type=zipfile.ZIP_DEFLATED) #将文件逐个打包到word文档中,压缩格式指定为ZIP_DEFLATEDazip.close() #关闭文件os.chdir('..')shutil.rmtree(tempdir,ignore_errors=True) #删除临时文件夹
except:pass
PS:除了word文件,其他的office文档插入的文件对象也可以照这个思路处理。
python在word文档里插入文件对象相关推荐
- python数据写入表格生成图片_python在word文档里插入图片和表格实例代码演示
# -*- coding: UTF8 -*- from docx import Document from docx.shared import Pt doc = Document() # 文件存储路 ...
- word文档里插入图片显示不完整,只显示一半,怎么处理?
word文档里插入图片显示不完整,只显示一半,怎么处理? 目录 word文档里插入图片显示不完整,只显示一半,怎么处理? 1.把鼠标光标放置图片的末尾,然后点击鼠标右键,选择[段落]选项 2.在[缩进 ...
- 在word文档中插入外部对象(例如插入另一个外部word文档或excel文档)
一.插入外部文件 例如插入外部word文档: 插入--对象--对象--由文件创建--选择文件,勾选链接到文件.显示为图标. 确定即可. 二.插入外部flv文件 第1步 首先打开一个WORD文件,点击& ...
- python从word文档里提取标题并生成目录
可以使用 python-docx 库来读取 word 文档并提取标题.可以先安装这个库: pipinstall python-docx
- pdf内容怎么复制到word文档里_pdf文件怎么放到word里?这招实在是太好用了
PDF文件怎么放到word里? 工作的时候,"爱转角,转角遇见PDF"(滑稽).总而言之,工作的时候碰到PDF文件是百分百的事情.即使是教师类职业,也会偶尔在学校通知群里看到PDF ...
- 电脑长截图软件_电脑屏幕长截图+WORD文档里没有插入PDF文件选项时怎么办? 简单一招轻松完成...
111111 办 公 小 技 巧 在用电脑查看网页时,想把网页上的内容截下来,保存成一张图片,可是内容又不全在一屏里,不能简单的用截屏完成,这时怎么办? 想把一个PDF文件插入到WORD ...
- php怎么在表格里插图片,Python操作word文档插入图片和表格的实例演示
今天带来Python操作word文档插入图片和表格的实例演示教程详解 前言 图片是Word的一种特殊内容,这篇文章主要介绍了关于Python操作word文档,向里面插入图片和表格的相关内容,下面话不多 ...
- python批量读取图片并复制入word_提取出 Word 文档里的图片 并利用 python 批量转换格式...
日常工作中,你是否遇到过这样的场景,领导发来一份 Word 文档,要求你将文档中的图片存储到一个文件夹内,并且还要将图片都改成 .jpg 或者 .png,你会怎么办?你是不是一边内心崩溃,一边开始一张 ...
- Python 操作Word文档插入图片和表格实例演示
Python 操作Word文档插入图片和表格实例演示 效果图 实现过程 ① python-docx 库安装 ② word 文档插入图片演示 ③ word 文档插入表格演示 [ 文章推荐 ] Pytho ...
最新文章
- 西门子smart200以太网通讯协议
- ubuntu 搭建webrtc环境
- DAVY的神龙帕夫——读者的心灵故事|十二橄榄枝的传说
- network3D: 交互式桑基图
- 怎么清空topic数据_20.Roscpp/Rospy:Topic_demo
- Mine Video Player – 视频播放器WordPress插件
- 做了项目才知道的Cookie和Session
- [mysql]三种方法为root账户指定密码
- @DateTimeFormat 和 @JsonFormat 注解的区别和使用
- 数模比赛经验分享(美赛分享)
- 数字信号处理经典书籍
- Centos7查看硬盘容量
- laravel实现打包多个文件,并下载
- sucess - money - freedom
- Elasticsearch - Indices stats 获取索引级别的统计信息之三 【indexing】索引操作信息
- 《操作系统真象还原》——0.25 指令集、体系结构、微架构、编程语言
- 掌控健身节奏 飞利浦降噪运动耳机A7507 上市
- daily reading
- 语音模块LD3320模块的二次开发,并与树莓派进行串口通信
- 第二天送宇轩幼儿园记事