星期四, 2月 19, 2009

取出WORD文件中所有文字框的文字

我的工作因為要整理作者提供的稿件,因此一直有個需求就是把WORD文件中所有文字框(有加上文字的快取圖形、水平或是垂直的文字框)中的文字取出來,這樣我就不需要一個一個文字框作Copy貼的動作,今天剛好找到了一個合用的範例如下:

Dim sh As Shape
Dim txt As String
For Each sh In ActiveDocument.Shapes
If sh.TextFrame.HasText Then
txt = sh.TextFrame.TextRange.Text
MsgBox (txt)
End If
Next sh


只要把MsgBox那行換成你需要的動作,就可以將取出的文字再利用了,我自己是把所有文字匯集到一個跟WORD文件同名,但加上 "_shape" 字尾的文字檔:

Sub 匯出文字框的文字()
'
fname = ActiveDocument.FullName 'Word檔名
txtFname = Left(fname, Len(fname) - 4) & _
"_shapes.txt" 'txt檔名
Set fs = CreateObject("Scripting.FileSystemObject")
Set txtfile = fs.CreateTextFile(txtFname, True) '建立文字檔

Dim sh As Shape
Dim txt As String

For Each sh In ActiveDocument.Shapes
If sh.TextFrame.HasText Then
txt = sh.TextFrame.TextRange.Text
txtfile.writeline txt
End If
Next sh
txtfile.Close
End Sub


延伸閱讀:

1 則留言:

  1. 多謝生先提供參攷!
    見先生亦涉獵文史,實難得同道也 ^^
    謹加先生為fb友,盼先生不棄
    至若先生嗜讀之《認識古籍版刻與藏書家》,正寒齋有此線上可供翻檢,作者亦我博士指導教授,不知意下如何?在下所以亦熱衷於程式者,亦為此文獻之業爾.

    回覆刪除