我开始学习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();
答案 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收件箱,但我可能在周一之前不回复任何问题。