2012-03-12 56 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(); 
    } 
}