Python 找出word 裡面所有圖片

說明

這個有發現兩個做法,第一個是把word的doc檔案存成html格式,就會自動將圖片裝在同一個資料夾

第二種方法是,因為python 有一個方法是把 docx 存成 zip,在 zip 底下會有一個目錄都是存圖片的,所以做法是把原本的 doc 檔案先轉成 docx,接著再把docx轉成 zip,再將圖片存出來,再把 zip 轉回docx

相比之下第一個方法簡單多了!

操作流程

ToHtml參數8

#!/usr/bin/env python
#coding=utf-8
from win32com import client as wc
word = wc.Dispatch('Word.Application')
doc = word.Documents.Open(r"D:\Python\20191224_Bonescan\01.doc")
doc.SaveAs(r"D:\Python\20191224_Bonescan\1.html", 8)
doc.Close()
word.Quit()
print("finish")

Demo

原始的 word

執行程式後產出的樣子

ToHtml參數10

#!/usr/bin/env python
#coding=utf-8
from win32com import client as wc
word = wc.Dispatch('Word.Application')
doc = word.Documents.Open(r"D:\Python\20191224_Bonescan\01.doc")
doc.SaveAs(r"D:\Python\20191224_Bonescan\1.html", 10)

doc.Close()
word.Quit()
print("finish")

Demo

執行程式後產出的樣子

兩個參數相比:

參數10 後面的圖片資料夾比較乾淨,比較符合這次的目標萃取出圖片

參考:

第二種方法來囉~

操作流程

由於後續操作要用 docx 的檔案格式,所以先從 doc to docx

from win32com import client as wc #导入模块
word = wc.Dispatch("Word.Application") # 打开word应用程序
import os
docdir=r"D:\Python\20191224_Bonescan"
os.chdir(docdir)
files = os.listdir(docdir)
#print(files)
for file in files:
        if file.endswith(".doc"): #匹配docx文件
            #print(file)
            a=docdir+'/'+file
            doc = word.Documents.Open(a)  # 打开word文件
            doc.SaveAs("{}x".format(a), 16)  # 另存为后缀为".docx"的文件,其中参数12指docx文件
            doc.Close()  # 关闭原来word文件

word.Quit()
print("finish")

docx抓出圖片

#!/usr/bin/env python
# coding:gbk
import os,zipfile,shutil
def getimage(docdir):
    os.chdir(docdir)
    dirlist = os.listdir(docdir)
    for i in dirlist:
        if i.endswith(".docx"): #匹配docx文件
            docname = i.split(".") #以“.”做成列表形式
            os.rename(i,"%s.ZIP"%docname[0]) #重命名为ZIP格式
            f = zipfile.ZipFile("%s.ZIP"%docname[0], 'r')
            for file in f.namelist():
                if "word" in file:
                    f.extract(file)  #将压缩包里的word文件夹解压出来
            f.close()
            oldimagedir = r"%s\word\media"%docdir #定义图片文件夹
            shutil.copytree(oldimagedir,"%s\%s"%(docdir,docname[0])) #拷贝到新目录,名称为word文件的名字
            os.rename("%s.ZIP" % docname[0],"%s.docx"% docname[0]) #将ZIP名字还原为DOCX
            shutil.rmtree("%s\word"%docdir) #删除word文件夹
if __name__=="__main__":
    getimage(r"D:\Python\20191224_Bonescan")

Demo

參考:

這個出來圖片也是屬於乾淨的,只是程式邏輯有一點複雜,但是我有遇到有一個特殊的情況,無法用這個方法

就是在 doc 轉成 docx 的時候,有些圖片無法轉換成功,這裡猜測原本的圖片可能不屬於 jpg或是png這一類型的,或是在貼上圖片的時候採用匯入等方法

都可能導致後續 doc轉 docx 不成功,所以後來我還是採用 doc 轉 html 抓圖

Demo:doc to docx 圖片失敗

這個後續目前沒有想到解法.....

留言