КонтекстКак читать содержимое документа Word, с помощью его XML в VBA
Я пытаюсь создать документ Word, браузер в Excel, чтобы просеять корыто большого количества документов (около 1000).
Процесс открытия документа 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
).
Это было бы намного быстрее, чем загрузка всех изображений, диаграмм и таблиц слова документа, которые бесполезны в текстовом поиске.
Таким образом, я хотел бы спросить, есть ли способ в VBA, чтобы открыть текстовый документ, как почтовый файл и доступ, XML документ затем обработать его как обычную строку символов в VBA, так как у меня уже есть путь и имя файла с учетом вышеуказанного кода.
Вы можете получить доступ к файлам с zip-файлами напрямую через объект Shell (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
Спасибо вам обоим, я посмотрю ссылки и попытаюсь что-то сделать. –