2013-02-25 70 views
0

文檔格式不應更改。除了文字順序,沒有什麼改變。如何將C#中的ms-word文檔中的所有單詞倒轉?

文件:

Word1 word2 word3 word2... -- END OF LINE OR PARAGRAPH 
Word5 word1 word5 word4..... 

倒車後應該像下面

1droW 2drow 3drow 2drow... -- END OF LINE OR PARAGHRAPH 
5droW 1drow 5drow 4drow..... 

我已經有這樣的代碼,通過文字去一個接一個,但我沒有任何想法如何更改,恕不缺少格式。

string RT = ""; 


Word.Application wordObject = new Word.Application(); 
wordObject.Visible = false; 

Word.Document docs = wordObject.Documents.Open(@"D:\ELAHE (J)\a.docx"); 

String strLine; 
bool bolEOF = false; 

docs.Characters[1].Select(); 

int index = 0; 
do { 

    object unit = Word.WdUnits.wdWord; 
    object count = 1; 
    wordObject.Selection.MoveEnd(ref unit, ref count); 

    wordObject.Selection.InsertBefore("‭"); 
    strLine = wordObject.Selection.Text; 
    RT += ++index + " - " + strLine + "\r\n"; 


    object direction = Word.WdCollapseDirection.wdCollapseEnd; 
    wordObject.Selection.Collapse(ref direction); 

    if (cnt++ > 100) break; 

    if (wordObject.Selection.Bookmarks.Exists(@"\EndOfDoc")) bolEOF = true; 
} while (!bolEOF); 

docs.Close(); 
wordObject.Quit(); 
docs = null; 
wordObject = null; 
+0

你想用這種算法完成什麼? – 2013-02-25 19:04:51

+0

@PaulSasik我正在試圖翻轉文檔中的每一個單詞,而不會錯過它的風格。 – 2013-02-25 19:08:00

+1

我明白,但最終會如何完成。我假設你所描述的算法只是更大問題的一部分。 – 2013-02-25 19:09:53

回答

1

剛剛創建了一個如何完成此操作的示例(C#5.0,Word Interop v。15(Office 2013))。代碼遍歷每個段落並顛倒段落中的每個單詞。該代碼包括檢查行尾符號(\r),以確保這些不會顛倒。

我不是100%確定\r是Word使用的唯一的行尾符號,所以如果遇到其他種類,例如\r\n或類似的東西,它應該是相當直接的,包括這些檢查。

var wordApplication = new Application() { Visible = true }; 
var myDocument = wordApplication.Documents.Open(@"C:\Users\...\my.docx"); 

for (var i = 1; i <= myDocument.Paragraphs.Count; i++) 
{ 
    var paragraph = myDocument.Paragraphs[i]; 
    var words = paragraph.Range.Words.Cast<Range>().Select(r => r.Text).ToList(); 

    // Empty paragraph -> continue 
    if(words.Count == 1 && words[0] == "\r") 
     continue; 

    for (var j = 0; j < words.Count; j++) 
    { 
     var word = words[j]; 

     // Should not be reversed 
     if(word == "\r") 
      continue; 

     var reversed = new string(word.Trim().Reverse().ToArray()); 

     words[j] = (word.EndsWith(" ")) ? reversed + " " : reversed; 
    } 

    paragraph.Range.Text = string.Join("", words); 
} 
+0

謝謝你好像這樣可以正常工作。 – 2013-02-26 22:41:12

相關問題