擷取 Word 檔內圖片工具


這個工具其實沒太大用處,基本上是展示下面那個討論緒的實做,利用 VS2005 實做,所以使用者端需安裝 .Net framework 2.0 。
 
下載位置:
 
執行畫面如附圖。
 
執行步驟:
1. 選取 Word 檔。
2. 選取要存放圖片的目錄。
3. 選取要輸出的圖檔類型,支援 png/jpg/gif/bmp ,預設採用 png 。
4. 選擇執行。
 
程式會建立 Word.Application 物件,依據上面討論緒將 Word 圖片檔讀出,並存於指定目錄,圖片檔名規則為 wdpic00000.ext 。
寫這個程式順便測一下縮放螢幕、縮放圖形、Word 執行完釋放 Word.Application ,可在程式不關閉下,檢查 Winword.exe 是否已自動結束,有問題的話,請在這個討論緒回覆,以利匯整。
 
Categories: Office | 16 則迴響

文章分頁導航

16 thoughts on “擷取 Word 檔內圖片工具

  1. 子璉

    主要程式碼請參閱上述討論緒內貼的程式碼,其他附帶需要的程式碼均發布在:
    .Net 原始碼分享:http://tlcheng.no-ip.com/TLCheng/Net/NetList.aspx

  2. 子璉

    DNS 停用造成網址變更:
    http://www.tlcheng.tk/TLCheng/Net/NetList.aspx

  3. 子璉

    疑?我記得 Google 那邊有主要程式碼片段,剛剛居然沒看到… 我抽掉關於 EMF/WMF 的片段,主要程式碼片段如下:

    Dim i As IntegerMe.Status = "正在建立 Word.Application 物件"
    Dim wdApp As Object = CreateObject("Word.Application")
    Me.Status = "正在開啟 " & txtWordFile.Text
    Dim wdDoc As Object = wdApp.Documents.Open(txtWordFile.Text)
    Dim wdPic As System.Drawing.Image
    Dim nPic, iPic As Integer
    Dim strFileType As String = cboFileType.Text
    Dim imgFormat As System.Drawing.Imaging.ImageFormat = GetImageFormat(strFileType)
    Dim strPictureName As String
    iPic = 0
    With wdDoc
    nPic = .InlineShapes.Count + .Shapes.Count
    With .InlineShapes
    For i = 1 To .Count
    Try
    Select Case .Item(i).Type
    Case 3 ' picture
    .Item(i).Select()
    wdApp.Selection.Copy()
    If My.Computer.Clipboard.ContainsImage() Then
    iPic += 1
    strPictureName = txtPicDir.Text & "\wdpic" & iPic.ToString("00000") & "." & strFileType
    wdPic = My.Computer.Clipboard.GetImage()
    wdPic.Save(strPictureName, imgFormat)
    wdPicBox.Image = wdPic
    wdPicBox.Refresh()
    Threading.Thread.Sleep(0)
    Me.Status = "[" & iPic & "/" & nPic & "] 儲存 " & strPictureName
    End If
    End Select
    Catch
    Me.Status = "在 InlineShapes.Item(" & i & ") 傳回物件無法辨識。"
    End Try
    Next
    End With
    With .Shapes
    For i = 1 To .Count
    Try
    Select Case .Item(i).Type
    Case 3 ' picture
    .Item(i).Select()
    wdApp.Selection.Copy()
    If My.Computer.Clipboard.ContainsImage() Then
    iPic += 1
    strPictureName = txtPicDir.Text & "\wdpic" & iPic.ToString("00000") & "." & strFileType
    wdPic = My.Computer.Clipboard.GetImage()
    wdPic.Save(strPictureName, imgFormat)
    wdPicBox.Image = wdPic
    wdPicBox.Refresh()
    Threading.Thread.Sleep(0)
    Me.Status = "[" & iPic & "/" & nPic & "] 儲存 " & strPictureName
    End If
    End Select
    Catch
    Me.Status = "在 Shapes.Item(" & i & ") 傳回物件無法辨識。"
    End Try
    Next
    End With
    Me.Status = "正在清除剪貼簿"
    My.Computer.Clipboard.Clear()
    Me.Status = "正在關閉 " & txtWordFile.Text
    .Close()
    End With
    wdDoc = Nothing
    Me.Status = "正在釋放 Word.Application 物件"
    wdApp.Quit()
    wdApp = Nothing
    Me.Status = "正在回收記憶體"
    GC.Collect()
    Me.Status = "完成轉換輸出"

  4. 子璉

    已經看到兩個網頁推薦本軟體下載…
    我自己是覺得有點糗,從上面本文可以看到,原先這是在程式討論版討論的範例產品,所以東西是隨便寫寫,幾乎都沒做防呆,所以很容易出問題,甚至我也很懷疑我還會不會維護這個程式,因為原始碼燒到光碟後,我就砍到不知道哪裡了…
    先前有同學需要,我有改成支援 EMF 的向量檔,也因為網頁討論到如何處理 Excel ,所以後來做範例測試的版本還支援 Excel …
    我真正要說的是,這不是好物,只是一個 sample code ,所以不要推了,我會覺得很丟臉的~ 
    >_<

  5. 子璉

    關於從 Excel 中抽出圖檔相關撰寫資訊,我寫在這篇:
    [VBNET] 關於剪貼簿延後提出的處理http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!1717.entry
     
    就是這在處理這篇,順便讓 Word 這邊能支援 EMF 了。

  6. k.c.

    璉兄:
    小的按執行步驟:
    1. 選取 Word 檔。
    2. 選取要存放圖片的目錄。
    3. 選取要輸出的圖檔類型,支援 png/jpg/gif/bmp ,預設採用 png 。
    4. 選擇執行。
    所有都正常完成,
    但在存檔目錄卻找不到檔案!
    不知是哪裡出錯了,
    可否幫幫小弟?
    謝謝您!!

  7. 子璉

    沒有更多的資訊,無法猜測或判斷問題所在。
     
    一些原則供參考:如果沒有抓到可辨識的圖片,將不會輸出圖片。
    其中比較特別的是物件並非是圖片,例如在 Excel 畫一個 Chart 圖,直接複製貼上時,實際上在 Word 是 OLE 崁入的物件,在目前網址提供的舊版本不支援延後提出的貼上時,就撈不到。所以在 Excel 複製貼進 Word 時,必須在貼上時,改用選擇性貼上,貼為 EMF 格式。
     
    整併 Excel 功能的新版本雖然支援延後提出,不過崁入的物件在複製時,延後提出是需要 OLE 伺服器(也就是原先的軟體),若將檔案移到別台電腦、電腦重灌、軟體版本更新或移除,都有可能造成延後提出的複製沒有對應的 OLE 伺服器提供服務,此時無法達到圖片另存的能力。

  8. 子璉

    發佈新版本,請參考下文:擷取 Office 檔內圖片工具http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!3357.entry

  9. cake

    不好意思請問一下~可以將程式碼寄給我嗎^^?

  10. 子璉

    剛剛居然看到防毒軟體掃描此連結下載的程式,奇怪,怎麼不掃描新版的,掃舊版的?https://www.siteadvisor.be/sites/twbbs.org/downloads/17668687/

  11. 涂珍珍

    我最近使用時,它說應用程式初始(0xc0000135)失敗,請問要怎麼改善

  12. 子璉

    錯誤訊息盒有三個按鈕,左下方有個詳細,點出來會有個文字盒,把裡面內容複製出來才能看是啥原因。這支程式會呼叫 Office 來執行,請確認你使用的帳號權限可以存取 Office 軟體。

  13. 引用通告: 擷取 Office 檔內圖片工具 | 鄭子璉

  14. 引用通告: [VBNET] 關於剪貼簿延後提出的處理 | 鄭子璉

  15. 引用通告: 關於密技偷偷報 43 擷取Word與Excel的圖片圖表 | 鄭子璉

  16. Gilbert Lien

    不好意思
    可以跟您索取完整的程式碼嗎??

發表留言

在 WordPress.com 建立免費網站或網誌.