상황VBA에서의 XML을 통해 Word 문서의 내용을 읽을 방법
내가 (약 1000) 문서의 많은 양의 물마루 선별하기 위해 Excel에서 Word 문서 브라우저를 구축을 위해 노력하고 있습니다.
워드 문서를 여는 프로세스가 다소 느립니다 (문서 당 약 4 초 정도이므로 모든 쿼리를 처리하는 데 2 시간이 걸리며 단일 쿼리의 경우 너무 느립니다). 오프닝을 늦출 수있는 모든 일을 비활성화하여, 따라서 나는 엽니 다
- 으로는 (일부 문서에 일어날 수있는)
- 문서의 표시를 비활성화 열기 및 복구 모드없이 단지
- 읽기
내 시도 지금까지 몇 가지 키워드가 매 시간을 표시 할 수 있기 때문에 동일하지 컨텍스트 (안 내가 처리 할 수 있기 때문에 여기에 문제의 핵심에 있음을 텍스트 인 경우이 문서를 통해 볼 까다로운 있습니다
배열에로드 됨). 따라서 종종 Windows explorer
솔루션 (예 : link)을 사용할 수 없습니다.
당분간 나는 단어 문서를 열어 내용을 분석하는 작업 매크로를 관리 할 수있었습니다.
코드 여기
코드의 샘플입니다. 나는 Microsoft Word 14.0 Object Library
참조를 사용 주
' Analyzing all the word document within the same folder '
Sub extractFile()
Dim i As Long, j As Long
Dim sAnalyzedDoc As String, sLibName As String
Dim aOut()
Dim oWordApp As Word.Application
Dim oDoc As Word.Document
Set oWordApp = CreateObject("Word.Application")
sLibName = ThisWorkbook.Path & "\"
sAnalyzedDoc = Dir(sLibName)
sKeyword = "example of a word"
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
ReDim aOut(2, 2)
aOut(1, 1) = "Document name"
aOut(2, 1) = "Text"
While (sAnalyzedDoc <> "")
' Analyzing documents only with the .doc and .docx extension '
If Not InStr(sAnalyzedDoc, ".doc") = 0 Then
' Opening the document as mentionned above, in read only mode, without repair and invisible '
Set oDoc = Word.Documents.Open(sLibName & "\" & sAnalyzedDoc, ReadOnly:=True, OpenAndRepair:=False, Visible:=False)
With oDoc
For i = 1 To .Sentences.Count
' Searching for the keyword within the document '
If Not InStr(LCase(.Sentences.Item(i)), LCase(sKeyword)) = 0 Then
If Not IsEmpty(aOut(1, 2)) Then
ReDim Preserve aOut(2, UBound(aOut, 2) + 1)
End If
aOut(1, UBound(aOut, 2)) = sAnalyzedDoc
aOut(2, UBound(aOut, 2)) = .Sentences.Item(i)
GoTo closingDoc ' A dubious programming choice but that works for the moment '
End If
Next i
closingDoc:
' Intending to make the closing faster by not saving the document '
.Close SaveChanges:=False
End With
End If
'Moving on to the next document '
sAnalyzedDoc = Dir
Wend
exitSub:
With Output
.Range(.Cells(1, 1), .Cells(UBound(aOut, 1), UBound(aOut, 2))) = aOut
End With
With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub
내가 생각했던 아이디어는 문서 내에서 XML 컨텐츠는 컨텐츠에 직접 액세스 할 수를 통해 가고 있었다
내 질문 (이 당신을 새 버전의 Word에서 .zip
확장명을 사용하고 nameOfDocument.zip\word\document.xml
을 사용하여 문서 이름을 바꿀 때 액세스 할 수 있습니다.
텍스트 검색에서 사용하지 않는 단어 문서의 모든 이미지, 차트 및 표를로드하는 것보다 훨씬 빠릅니다.
따라서, 나는 zip 파일 및 XML 문서가 다음 VBA에서 문자의 일반 문자열처럼 처리에 대한 액세스와 같은 워드 문서를 열 VBA에서 수있는 방법이 있다면 내가 이미 가지고 있기 때문에, 물어보고 싶은게 위의 코드가 주어진 파일의 경로와 이름.
셸 개체 (http://www.rondebruin.nl/win/s7/win002.htm)를 통해 압축 파일을 직접 액세스 할 수 있지만 XML 구문 분석에 어려움이있을 수 있습니다 (http : // stackoverflow .com/questions/11305/how-to-parse-xml-using-vba) Word는 작동하기에 끔찍한 기본 xml을 가지고 있습니다. 행운을 빕니다. – Mikegrann
[VBA 매크로를 사용하여 폴더를 검색하여 키워드보기] (http://stackoverflow.com/a/20856265/4717755). 설명 된대로 FindFiles 함수를 사용하면 (두 번째 버전 사용) 문서의 모든 단어에 대한 Windows 색인을 활용할 수 있습니다. – PeterT
두 분 모두 덕분에 링크를보고 뭔가를 만들려고합니다. –