2017-06-22 57 views
0

我想從Word文件(doc/docx)中提取所有單詞並將它們放入列表中。看起來像microsoft.Office.Interop只是如果我想提取段落並將它們添加到列表中。從doc/docx文件中提取單詞c#

List<string> data = new List<string>(); 

Microsoft.Office.Interop.Word.Application app = new 
    Microsoft.Office.Interop.Word.Application(); 

Document doc = app.Documents.Open(dlg.FileName); 

foreach (Paragraph objParagraph in doc.Paragraphs) 
    data.Add(objParagraph.Range.Text.Trim()); 

((_Document)doc).Close(); 
((_Application)app).Quit();` 

我也找到了逐字提取的方法,但由於生成異常的循環,它不適用於大文檔。

`Dictionary<int, string> motRap = new Dictionary<int, string>(); 
     Microsoft.Office.Interop.Word.Application application = new Microsoft.Office.Interop.Word.Application(); 
     Document document = application.Documents.Open("C:/Users/Titri/Desktop/test/test/bin/Debug/po.txt"); 

    // Loop through all words in the document. 
    int count = document.Words.Count; 
    for (int i = 1; i <= count; i++) 
    { 
     string text = document.Words[i].Text; 
     motRap.Add(i, text); 

    } 
    // Close word. 
    application.Quit();` 

所以我的問題是,如果有一種方法可以從大的單詞文件中提取單詞。我認爲Microsoft.Office.Interop不是從大文件中提取的好工具。 對不起,我的英語不好。

+2

你對此做過任何研究嗎?這似乎是一個以前會問過的問題。 –

+0

是的,我已經做了4天的研究。我找到了從txt文件中提取單詞的方式,我發現了一種從docx文件中提取的方式,但這種方式對於大文件不起作用。所以這就是我在這裏問的原因。 – titi2fois

+0

我想你應該看看[問]。當你問一個以前可能被問過很多次的問題時,你需要顯示你的研究證據,即以鏈接等形式。具體解釋你的研究未能幫助你找到答案。 –

回答

1

段落中的對象稱爲Run,但我不知道這是否可用於Interop。爲提高您的體驗,我建議您切換到使用OpenXmlSdk,以防萬一您必須處理大量文檔。

如果你想堅持Interop,爲什麼不把每個段落分割成一個數組(顯然空格分隔符),然後添加所有的單詞?

+0

OpenXmlSdk允許我們操作Doc文件嗎?因爲我認爲它只是用於Open XML文檔 – titi2fois

+0

不確定您是否真的需要它們,因爲您同時指定了這兩個文檔。你確實是對的,OpenXmlSdk僅用於OpenXml標準。否則,請查看Aspose.Words,它可以作爲nuget-package使用。它允許你使用這兩種格式。 – codeguy

+0

是的,我指定了兩者,因爲它取決於用戶將使用哪個版本的Word,因爲Word將文件保存爲doc或docx格式,但更常見的是doc格式。 – titi2fois