首先,需要安装python-docx库,可以使用pip install python-docx命令进行安装。
其次,使用以下代码片段可以读取Word文档中的Excel嵌入文件:
from docx import Document
import zipfile
import shutil
import os
docx_path = 'example.docx'
docx_dir = 'docx_extract'
with zipfile.ZipFile(docx_path) as z:
for info in z.infolist():
if info.filename.startswith('word/embeddings/'):
_, _, name = info.filename.split('/')
with z.open(info) as f:
with open(os.path.join(docx_dir, name), 'wb') as out:
out.write(f.read())
for root, dirs, files in os.walk(docx_dir):
for file in files:
if file.endswith('.xlsx'):
print(os.path.join(root, file))
代码中,我们首先打开文档,并且用ZipFile读取文档。然后遍历其中所有的文件,找到嵌入的Excel文件。两个嵌入的文件,它们的路径分别是word/embeddings/Microsoft_Excel_Worksheet1.xlsx和word/embeddings/Microsoft_Excel_Worksheet2.xlsx。这两个文件的路径可以直接在Word文档中的XML中找到。我们将这些文件解压到一个临时文件夹,并且找到其中后缀是.xlsx的文件进行后续处理。
下面是一个示例:
假设我们有一个名为example.docx的Word文档,其中包含两个Excel嵌入文件。我们可以通过修改上面的代码,找到并读取这些文件,从而对这些文件进行操作,这里我们将其中一个文件的内容读取,并打印输出。
from docx import Document
import zipfile
import shutil
import os
import openpyxl
docx_path = 'example.docx'
docx_dir = 'docx_extract'
with zipfile.ZipFile(docx_path) as z:
for info in z.infolist():
if info.filename.startswith('word/embeddings/'):
_, _, name = info.filename.split('/')
with z.open(info) as f:
with open(os.path.join(docx_dir, name), 'wb') as out:
out.write(f.read())
for root, dirs, files in os.walk(docx_dir):
for file in files:
if file.endswith('.xlsx'):
wb = openpyxl.load_workbook(os.path.join(root, file))
ws = wb.active
print(ws['A1'].value)
代码中,我们使用了openpyxl库来读取Excel文件的内容。我们通过遍历之前提取出来的所有xlsx文件,使用load_workbook()方法读取Excel文件。然后通过workbook.active获取工作簿,以及worksheet[‘A1’].value获取单元格A1的值,并打印输出。
参考资料:
1. python-docx: https://python-docx.readthedocs.io/en/latest/
2. openpyxl: https://openpyxl.readthedocs.io/en/stable/