如何扫描一堆Microsoft Word(2003)文档?我在文档中搜索某个短语,并希望返回包含短语的文件名。
代码示例特别有用。
答案 0 :(得分:2)
你可以用COM做到这一点。但是,如果您要扫描大量文件,这可能会非常缓慢,因为您将通过Word本身与文本进行交互。
这里有一些python代码使用(抱歉,我不太了解.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
答案 1 :(得分:2)
allclaws方法的VB.NET版本:
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
修改
要完成此工作,您需要添加对Microsoft Word 11.0对象库的引用,该对象可在“添加引用”对话框的“COM”选项卡上找到
答案 2 :(得分:0)
对于2007年的文档,使用Open XML SDK 2.0 framework相当容易。这些文件基本上是一个zip文件,zip文件中包含一堆包含文档内容的xml文件。您所要做的就是扫描xml以使用此框架找到所需内容。
事实上,如果您有一个名为testDoc.docx的单词2007文档,您可以在其末尾添加.zip,然后您可以查看内部。所以它看起来像testDoc.docx.zip
主xml文件是名为document.xml的文件
答案 3 :(得分:0)
在Word 2003中,您可以搜索二进制文件,其中大多数文本都是完整的。
答案 4 :(得分:0)
如果您可以访问antiword和grep,它应该像
一样简单for file in `antiword *.doc | grep -vf word_to_find`
do
echo "$file"
done
答案 5 :(得分:0)
您可以使用Word Object Model
答案 6 :(得分:0)
手头没有代码示例。但是,你看过Windows索引服务并安装Office插件吗?
答案 7 :(得分:-1)
Word Interop服务是您的选择吗?如果在服务器上安装了Word,则只需打开word文档并使用Word自身的查找功能来查找文本。当然,这是一种资源密集型方法,使用Interop服务时需要注意很多事情,但它可以完成工作。
您最大的问题可能是需要在服务器上安装适当版本的Word。