Python讀取Word文檔中的Excel嵌入文件的方法詳解
今天群友提出一個問題:

給出Word示例如下:

對于這種嵌入文件在Word中都屬于ole文件。
下面我們假設需要讀取每個嵌入的Excel文件中的python工作表中的A1單元格。
python調用宏實現(xiàn)
首先我們看看如何調用com接口的宏代碼實現(xiàn)這個效果,最終完整代碼如下:
from win32com import client as win32
import os
word = win32.Dispatch("Word.Application")
word.Visible = True
wdDoc = word.Documents.Open(os.path.abspath("test.docx"))
try:
for shape in wdDoc.InlineShapes:
if shape.Type != 1 or not shape.OLEFormat.ProgID.startswith("Excel.Sheet"):
# 要求形狀類型為wdInlineShapeEmbeddedOLEObject,是Excel類型的OLE對象
continue
shape.OLEFormat.Open()
xlApp = win32.GetActiveObject('Excel.Application')
book = xlApp.Workbooks(1)
print([sht.Name for sht in book.Sheets])
print(book.Sheets("python").Range("A1").Value)
book.Close()
finally:
wdDoc.Close()
xlApp.Quit()
word.Quit()
執(zhí)行結果:
['java', 'forever', 'python']
python
['java', 'forever', 'python']
python hello world
['java', 'forever', 'python']
python
注意:此方法僅支持在已安裝辦公軟件(office或WPS)的windows環(huán)境下使用。
python解析ole文件實現(xiàn)
我通過壓縮軟件看到三個Excel文件其實是以ole的bin文件形式存儲:

我們也只需要理解并解析這些文件就可以得到對應的Excel文件,然后直接使用openpyxl或pandas解析。
HY.Li大佬提供了對應的代碼:

思路與我的想法不謀而合,不過我不知道用olefile這個現(xiàn)成的庫可以解析這些文件,原本還打算自己實現(xiàn)一下。
參考上面的代碼,最終我的實現(xiàn)如下:
import olefile
from zipfile import ZipFile
from openpyxl import load_workbook
filename = "test.docx"
with ZipFile(filename, "r") as zip_file:
for name in zip_file.namelist():
if not name.startswith("word/embeddings/"):
continue
with zip_file.open(name) as f:
if not olefile.isOleFile(f):
continue
ole = olefile.OleFileIO(f)
try:
book = load_workbook(ole.openstream("package"))
print(book.sheetnames)
print(book["python"]["A1"].value)
except Exception as e:
print(name, "當前ole對象不是Excel文件:", e)
結果:
['java', 'forever', 'python']
python
['java', 'forever', 'python']
python hello world
['java', 'forever', 'python']
python
相對來說,此方法跨平臺,速度快。
到此這篇關于Python讀取Word文檔中的Excel嵌入文件的方法詳解的文章就介紹到這了,更多相關Python讀取Word中的Excel嵌入文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Caffe數(shù)據(jù)可視化環(huán)境python接口配置教程示例
這篇文章主要為大家介紹了Caffe數(shù)據(jù)可視化環(huán)境python接口配置教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06
python安裝包出現(xiàn)Retrying?(Retry(total=4,?connect=None,?read=No
這篇文章主要給大家介紹了關于python安裝包出現(xiàn)Retrying?(Retry(total=4,?connect=None,?read=None,?redirect=None,?status=None))問題的解決方法,需要的朋友可以參考下2022-09-09
淺談Python中re.match()和re.search()的使用及區(qū)別
這篇文章主要介紹了淺談Python中re.match()和re.search()的使用及區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
哪種Python框架適合你?簡單介紹幾種主流Python框架
這篇文章主要介紹了幾種主流的Python框架,幫助大家更好的理解和學習Python,感興趣的朋友可以了解下2020-08-08
python?matplotlib繪圖詳解大全(非常詳細!)
這篇文章主要給大家介紹了關于python?matplotlib繪圖詳解的相關資料,matplotlib是python中用于繪制各種圖像的模塊,功能十分強大,通常與pandas模塊搭配使用,可以生成各種樣視的圖片,用于數(shù)據(jù)的分析和展示,需要的朋友可以參考下2023-09-09

