2017-07-11 32 views
2

我已經開始學習C#,主要是爲了MS Word自動化的目的。使用Interop.Word,我怎樣才能添加一個單詞「一二三」與兩個斜體?我能得到的最接近的是這樣的:Interop.Word斜體內聯字

//text with some italic words. 
para.Range.Text = "one "; 
Console.WriteLine(para.Range.Start); 
Console.WriteLine(para.Range.End); 

// <some magic methods that end the last range and start a new one in place> 

para.Range.Text = "two"; 
para.Range.Font.Italic = 1; 
Console.WriteLine(para.Range.Start); 
Console.WriteLine(para.Range.End); 

// <some magic methods that end the last range and start a new one in place> 

para.Range.Text = " three"; 
Console.WriteLine(para.Range.Start); 
Console.WriteLine(para.Range.End); 
para.Range.InsertParagraphAfter(); 

至於我需要的方法,我嘗試了很多東西,但都沒有工作。 MSDN文檔很難閱讀並省略許多重要細節。

編輯:我終於使它的工作,通過爲每個單詞創建一個新的範圍對象。這是關於醜如我能想象,但因爲至少它的工作原理:

 Word.Range rng = word_doc.Range(para.Range.End - 1, para.Range.End); 

     rng.Text = "one "; 
     Console.WriteLine(rng.Start); 
     Console.WriteLine(rng.End); 

     rng = word_doc.Range(rng.End - 1, rng.End); 
     rng.Text = "two"; 
     rng.Font.Italic = 1; 
     Console.WriteLine(rng.Start); 
     Console.WriteLine(rng.End); 

     rng = word_doc.Range(rng.End - 1, rng.End); 
     rng.Text = " three"; 
     rng.Font.Italic = 0; 
     Console.WriteLine(rng.Start); 
     Console.WriteLine(rng.End); 
     para.Range.InsertParagraphAfter(); 
+0

那麼,'para.Range.Font.Italic = 1;'應該這樣做,但你怎麼能說它工作?使用Console.WriteLine不會顯示文本爲斜體...您知道嗎? –

+0

目前尚不清楚問題所在。你的代碼看起來很好,除了與'Word'無關的'Console.WriteLine'部分。 –

+0

Console.WriteLine用於簡單的日誌記錄;而上面的代碼不能按預期工作,只有「三」是輸出。 「一」和「二」被覆蓋。 – user2341726

回答

1

這是最接近我能得到,使用此代碼我爲你做的主要問題是,它不添加背課文內聯,而是爲每個找到的單詞添加一個新行。希望這段代碼給你一些關於如何最好地以編程方式創建word文檔的想法!

Document extendedDocument = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument); 

Word.Selection currentSelection = Globals.ThisAddIn.Application.Selection; 

Word.Paragraph para; 
para = extendedDocument.Content.Paragraphs.Add(ref oMissing); 
para.Range.SetRange(currentSelection.Range.Start, currentSelection.Range.End); 

string string1 = "one two three"; 
string split1 = " "; 
string match1 = "two"; 

string[] elements = Regex.Split(string1, split1); 

foreach (var m in elements) 
{ 
    if (m.Equals(match1)) 
    { 
     para.Range.Text = m + " "; 
     para.Range.Font.Italic = 1; 
    } 
    else 
    { 
     para.Range.Text = m + " "; 
     para.Range.Font.Italic = 0; 
    } 

    para.Range.InsertParagraphAfter(); 
} 

編輯:祝你週末愉快!我將盡力在週末檢查我的SO收件箱,但我可能在星期一之前不會回覆任何問題。