使用Interop.Word的斜体内联词

时间:2017-07-11 04:44:45

标签: c# office-interop

我开始学习C#,主要用于MS Word自动化。使用Interop.Word,如何添加一行“one two three”,其中两行是斜体?我能得到的最接近的是:

//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();

1 个答案:

答案 0 :(得分: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收件箱,但我可能在周一之前不回复任何问题。