這個工具其實沒太大用處,基本上是展示下面那個討論緒的實做,利用 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 是否已自動結束,有問題的話,請在這個討論緒回覆,以利匯整。
主要程式碼請參閱上述討論緒內貼的程式碼,其他附帶需要的程式碼均發布在:
.Net 原始碼分享:http://tlcheng.no-ip.com/TLCheng/Net/NetList.aspx
讚讚
DNS 停用造成網址變更:
http://www.tlcheng.tk/TLCheng/Net/NetList.aspx
讚讚
疑?我記得 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 = "完成轉換輸出"
讚讚
已經看到兩個網頁推薦本軟體下載…
我自己是覺得有點糗,從上面本文可以看到,原先這是在程式討論版討論的範例產品,所以東西是隨便寫寫,幾乎都沒做防呆,所以很容易出問題,甚至我也很懷疑我還會不會維護這個程式,因為原始碼燒到光碟後,我就砍到不知道哪裡了…
先前有同學需要,我有改成支援 EMF 的向量檔,也因為網頁討論到如何處理 Excel ,所以後來做範例測試的版本還支援 Excel …
我真正要說的是,這不是好物,只是一個 sample code ,所以不要推了,我會覺得很丟臉的~
>_<
讚讚
關於從 Excel 中抽出圖檔相關撰寫資訊,我寫在這篇:
[VBNET] 關於剪貼簿延後提出的處理http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!1717.entry
就是這在處理這篇,順便讓 Word 這邊能支援 EMF 了。
讚讚
璉兄:
小的按執行步驟:
1. 選取 Word 檔。
2. 選取要存放圖片的目錄。
3. 選取要輸出的圖檔類型,支援 png/jpg/gif/bmp ,預設採用 png 。
4. 選擇執行。
所有都正常完成,
但在存檔目錄卻找不到檔案!
不知是哪裡出錯了,
可否幫幫小弟?
謝謝您!!
讚讚
沒有更多的資訊,無法猜測或判斷問題所在。
一些原則供參考:如果沒有抓到可辨識的圖片,將不會輸出圖片。
其中比較特別的是物件並非是圖片,例如在 Excel 畫一個 Chart 圖,直接複製貼上時,實際上在 Word 是 OLE 崁入的物件,在目前網址提供的舊版本不支援延後提出的貼上時,就撈不到。所以在 Excel 複製貼進 Word 時,必須在貼上時,改用選擇性貼上,貼為 EMF 格式。
整併 Excel 功能的新版本雖然支援延後提出,不過崁入的物件在複製時,延後提出是需要 OLE 伺服器(也就是原先的軟體),若將檔案移到別台電腦、電腦重灌、軟體版本更新或移除,都有可能造成延後提出的複製沒有對應的 OLE 伺服器提供服務,此時無法達到圖片另存的能力。
讚讚
發佈新版本,請參考下文:擷取 Office 檔內圖片工具http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!3357.entry
讚讚
不好意思請問一下~可以將程式碼寄給我嗎^^?
讚讚
剛剛居然看到防毒軟體掃描此連結下載的程式,奇怪,怎麼不掃描新版的,掃舊版的?https://www.siteadvisor.be/sites/twbbs.org/downloads/17668687/
讚讚
我最近使用時,它說應用程式初始(0xc0000135)失敗,請問要怎麼改善
讚讚
錯誤訊息盒有三個按鈕,左下方有個詳細,點出來會有個文字盒,把裡面內容複製出來才能看是啥原因。這支程式會呼叫 Office 來執行,請確認你使用的帳號權限可以存取 Office 軟體。
讚讚
引用通告: 擷取 Office 檔內圖片工具 | 鄭子璉
引用通告: [VBNET] 關於剪貼簿延後提出的處理 | 鄭子璉
引用通告: 關於密技偷偷報 43 擷取Word與Excel的圖片圖表 | 鄭子璉
不好意思
可以跟您索取完整的程式碼嗎??
讚讚