2012-03-12 57 views
1

我有一段代码用于阅读MS Office Word文档。试图阅读MS Office文档

static void ReadMSOfficeWordFile(string file) { 
    try { 
     Microsoft.Office.Interop.Word.Application msWordApp = new Microsoft.Office.Interop.Word.Application(); 
     object nullobj = System.Reflection.Missing.Value; 
     object ofalse = false; 
     object ofile = file; 

     Microsoft.Office.Interop.Word.Document doc = msWordApp.Documents.Open(
                ref ofile, ref nullobj, ref nullobj, 
                ref nullobj, ref nullobj, ref nullobj, 
                ref nullobj, ref nullobj, ref nullobj, 
                ref nullobj, ref nullobj, ref nullobj, 
                ref nullobj, ref nullobj, ref nullobj, 
                ref nullobj); 
     string result = doc.Content.Text.Trim(); 
     doc.Close(ref ofalse, ref nullobj, ref nullobj); 
     msWordApp.Quit(); 
     CheckLineMatch(file, result); 
    } 
    catch { 
     RaiseError("Unable to parse file because of MS Office error.", file); 
    } 
} 

我对此有三个问题。

首先 - 它依赖MS Office安装在每个可能运行的系统上。有些人更喜欢Libre Office,但这仍然需要针对MS Office Word文档运行。

二线,我不知道这是否会甚至对MS Office 2003和MS Office 2007和文档工作...

第三 - 这是缓慢的。这是非常慢的。

SO!我认为必须有比这更好的方式来运行它。我猜测有人必须知道比新手更好的方式。我只是试图阅读文档中的文本,没有别的。

回答

3

为了响应您的“Word应用程序悬空”,您需要告诉它关闭。

msWordApp.Quit() 

http://msdn.microsoft.com/en-us/library/bb215475(v=office.12).aspx

关于 “依赖于MS Offise正装”,你正在使用的互操作。所以根据定义需要安装它。您可以查看其中一个商业图书馆。

http://www.aspose.com/categories/.net-components/aspose.words-for-.net/default.aspx http://www.gemboxsoftware.com/document/pricelist

+1

谢谢!这确实修复了这一部分。 – MTeck 2012-03-12 18:19:59

+0

相反,我们可以使用NPOI,这是开源项目。查看我的文章,了解如何使用NPOI从.DOC文件中读取所有文本的示例 – Riju 2012-05-11 07:31:26

0

办公室互操作是一个选项(慢如你已经发现的),但要注意:它是由MS服务器般的场景(如ASP.NET或Windows服务或类似的不支持 ) - 见http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2

通常一些库是用来实现你想要什么:

的库方法通常非常快速,可用于多线程,可用于服务器场景并带有许多其他可能性...

至于你的第二点:与Interop你需要拨打Quit关闭应用程序...虽然有时候你需要调用System.Runtime.InteropServices.Marshal.FinalReleaseComObject太(这可能会有一些不良副作用看到http://blogs.msdn.com/b/yvesdolc/archive/2004/04/17/115379.aspx

0

你可能有兴趣在这个项目从CodePlex上 - NetOffice

从网站,这里有一些主要特点:

  • Office集成,而不版限制

  • 的Office版本的所有方法,属性和事件2000年,2002年,2003年,2007年,2010包括

  • 语法和语义上等同于微软的Interop大会

+1

NetOffice似乎仍需要安装Office。 – Broam 2012-03-12 18:30:45

3

我们能够实现很多事情与NPOI,一个开源项目,没有任何办公可靠性。

对于例如读取word文档中的所有文本可以实现如下所示。

public string ReadAllTextFromWordDocFile(string fileName) 
{ 
    using (StreamReader streamReader = new StreamReader(fileName)) 
    { 
     var document = new HWPFDocument(streamReader.BaseStream); 
     var wordExtractor = new WordExtractor(document); 
     var docText = new StringBuilder(); 
     foreach (string text in wordExtractor.ParagraphText) 
     { 
      docText.AppendLine(text.Trim()); 
     } 
     streamReader.Close(); 
     return docText.ToString(); 
    } 
}