Как сканировать несколько документов Microsoft Word (2003)? Я ищу определенную фразу в документах и хочу вернуть имена файлов тех, которые содержат фразу.Сканировать кучу документов Word для данной фразы
Образец кода будет особенно полезно.
Как сканировать несколько документов Microsoft Word (2003)? Я ищу определенную фразу в документах и хочу вернуть имена файлов тех, которые содержат фразу.Сканировать кучу документов Word для данной фразы
Образец кода будет особенно полезно.
версия VB.NET метода allclaws':
Function ContainsText(ByVal fileName As String, ByVal text As String) As Boolean
Dim app As New Microsoft.Office.Interop.Word.Application
Dim doc As Microsoft.Office.Interop.Word.Document
doc = app.Documents.Open(DirectCast(fileName, Object))
Try
Return doc.Content.Text.IndexOf(text, StringComparison.CurrentCultureIgnoreCase) <> -1
Finally
app.Quit()
End Try
End Function
Edit:
Чтобы сделать эту работу вам нужно добавить ссылку на библиотеку объектов Microsoft Word 11.0, доступно на вкладке COM диалогового окна «Добавить ссылки»
Для документов 2007 года достаточно легко использовать Open XML SDK 2.0 framework. Эти файлы в основном представляют собой zip-файл, а внутри zip-файла содержит кучу xml-файлов, содержащих содержимое документов. Все, что вам нужно сделать, это сканировать xml, чтобы найти то, что вам нужно, используя эту инфраструктуру.
На самом деле, если у вас есть документ Word 2007 с именем testDoc.docx, вы можете просто добавить .zip в конец, и вы сможете заглянуть внутрь. Так это будет выглядеть testDoc.docx.zip
Основной файл XML файл с именем document.xml
К сожалению, это документы 2003 года. Благодарю. –
В Word 2003 можно найти двоичный файл, самый текст нетронутым в там.
Если у вас есть доступ к Antiword и Grep, это должно быть так же просто, как
for file in `antiword *.doc | grep -vf word_to_find`
do
echo "$file"
done
Вы можете использовать Word Object Model
ли служба Слово Interop вариант для вас? Если Word установлен на сервере, вы можете просто открыть документы с документами и использовать функции «Найти объекты самого Word», чтобы найти текст. Конечно, это ресурсоемкий метод, и есть много вещей, которые нужно соблюдать при использовании услуг Interop, но он выполнит эту работу.
Ваша самая большая проблема может заключаться в том, что на сервере должна быть установлена соответствующая версия Word.
Кто сказал что-нибудь о сервере ...? У меня на компьютере установлено Word, на котором это будет работать. Я, конечно, не хочу вручную загружать 1000 файлов для фрагмента текста! Мне нужно сделать это программно с .NET. –
Забавно, что самый высокий голосовой ответ (allclaws) должен создать экземпляр Word, так же, как и услуги Interop, но я проголосовал. –
Также см. Комментарий Патрика Макдональда - это именно то, что я предлагал. –
У вас нет соответствующих кодов. Но просмотрели ли вы службу индексирования Windows и установили плагин Office?
Вы можете сделать это с помощью COM. Однако, если вы сканируете много файлов, это может быть болезненно медленным, так как вы будете взаимодействовать с текстом через сам Word.
Вот некоторые питона код, используя (извините, я не знаю много .Net, но COM-функции будут похожи)
Я предполагаю, что вы, возможно, придется урезать до пробельные немного, чтобы получить хорошие матчи.
import os, win32com.client
def doc_has_phrase(filename, phrase):
found = False
app = win32com.client.Dispatch('Word.Application')
doc = app.Documents.Open(filename, False, False, False)
if phrase in doc.Content.Text.lower():
found = True
app.Quit()
return found
phrase = 'key phrase in lowercase'
valid_types = ['doc']
path = "C:\\Path\\To\\Files\\"
docs = dict ([(f, None) for f in os.listdir (path) if f[-3:] in valid_types])
for doc in docs:
print doc_has_phrase(path+doc, phrase), path+doc
СПАСИБО !! Какую ссылку мне нужно добавить, чтобы сделать эту работу? Если у меня нет библиотеки DLL, где я могу ее найти? –
@Josh, библиотека является частью Word, поэтому, если на вашем компьютере установлено Word, вы получите ее. –