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_DEFLATED
    azip.close()                                       #关闭文件
    os.chdir('..')
    shutil.rmtree(tempdir,ignore_errors=True)    #删除临时文件夹
except:
    pass

PS:除了word文件,其他的office文档插入的文件对象也可以照这个思路处理。

### 回答1: Python可以使用`python-docx`库将图片转换为Word文档。首先,需要安装`python-docx`库,使用以下命令安装: ```python pip install python-docx ``` 然后,可以使用以下代码将图片插入Word文档中: ```python import docx def add_image_to_word(image_path): # 创建一个新的Word文档 doc = docx.Document() # 在文档中添加一张图片 doc.add_picture(image_path) # 保存文档 doc.save('output.docx') # 调用函数,传入图片的路径 add_image_to_word('image.jpg') ``` 上述代码首先导入`docx`模块,然后定义了一个`add_image_to_word`函数,该函数接受图片路径作为参数。在函数中,首先创建一个新的Word文档对象`doc`,然后使用`doc.add_picture(image_path)`方法将图片插入到文档中。最后,使用`doc.save()`方法保存文档到指定路径。 以上就是使用Python将图片转换为Word文档的简单示例。请确保已经安装了所需的依赖库,并替换上述代码中的图片路径为自己需要转换的图片路径。 ### 回答2: 要将Python中的图片转换为Word文档,我们可以使用Python的第三方库python-docx和Pillow来实现。首先,我们需要安装这两个库。 使用Pillow库可以从文件中加载图像,并将其转换为适合在Word文档插入的格式。然后,我们使用python-docx库创建一个Word文档,并将图像插入到文档中。 以下是一个基本的实现示例: ```python from docx import Document from docx.shared import Inches from PIL import Image # 打开图像文件 image = Image.open('image.jpg') # 创建Word文档 doc = Document() # 在文档中插入图像 doc.add_picture('image.jpg', width=Inches(6), height=Inches(4)) # 保存Word文档 doc.save('output.docx') ``` 在此示例中,我们首先使用Pillow库中的Image.open()函数打开要转换的图像文件。然后,使用python-docx库中的Document()函数创建一个新的Word文档对象。接下来,使用add_picture()方法将图像插入到文档中。我们可以提供指定的图像大小(这使用英寸为单位)。最后,使用save()方法将文档保存为output.docx。 这只是一个简单的示例,你可以根据自己的需求进一步修改和调整。请确保已经安装了所需的库,然后将代码保存为.py文件并运行。 ### 回答3: 要将Python图片转换成Word文档,可以使用Python的第三方库python-docx来实现。首先,我们需要安装python-docx库。可以使用以下命令在终端中安装: pip install python-docx 安装完毕后,我们可以开始编写Python代码。首先,需要导入python-docx库: import docx 接下来,我们创建一个Word文档对象: document = docx.Document() 然后,我们将图片插入Word文档中: document.add_picture('image.jpg') 这,'image.jpg'是你要转换的图片的路径。你可以根据实际情况进行更改。 最后,我们保存Word文档: document.save('output.docx') 这,'output.docx'是转换后的Word文档的保存路径。同样,你可以根据实际情况进行更改。 整个过程就是这样。通过上述代码,可以将Python图片转换成Word文档。注意,转换后的文档将只包含图片,而不会有其他内容。
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值