我承认,我对使用Interop库非常陌生,但人们似乎总是给出的建议是,录制一个宏并查看vba代码。问题是,宏没有准确记录我正在做的事情:单击快速样式将其应用于当前选择。
我的任务非常简单:我需要将快速样式应用于段落( Microsoft.Office.Interop.Word.Paragraph )。但是,使用 set_style 命令仅应用基本格式,并且段落保留原始的快速样式选择(正常)。
使用Remou的方法虽然适用于我,但它看起来与我自己的代码非常相似,我无法使其工作,我认为这可能是我对对象模型的理解有点过时。
public void AddParagraph(string text, string styleName = null)
{
Paragraph paragraph = _document.Content.Paragraphs.Add();
if (styleName != null)
{
paragraph.Range.set_Style(_document.Styles[styleName]);
}
paragraph.Range.Text = text;
paragraph.Range.InsertParagraphAfter();
}
然后我用它来调用它AddParagraph("A title", "Heading 1");
,但使用上面的包装器构建我的文档的结果是,没有应用完整的样式,只有字体,颜色,大小和粗体/斜体。
我正在使用我自己的.dotx
文件,我自己定义和命名的样式,但只是从Remou复制代码可以使用我自己的模板,所以我不认为这是问题,并使用该代码我无法弄清楚如何用自己的样式附加多个段落。
任何人都可以指出我的方法有什么问题,或者至少我如何能让Remou提供的答案符合我的要求? :)
答案 0 :(得分:8)
这适合我。
Word.Application _wordApp = new Word.Application();
Word.Document oDoc = _wordApp.Documents.Add();
_wordApp.Visible = true;
_wordApp.Selection.TypeText("Heading");
oDoc.Paragraphs[1].set_Style(Word.WdBuiltinStyle.wdStyleHeading2);
当你说
时paragraph.Range.Text = text + paragraph.Range.Text;
你得到的段落比你想象的要多。我估计你需要:
paragraph.Range.Text = text;
尝试:
Paragraph paragraph = _document.Content.Paragraphs.Add();
paragraph.Range.Text = text;
if (styleName != null)
{
paragraph.set_Style(_document.Styles[styleName]);
}
paragraph.Range.InsertParagraphAfter();
答案 1 :(得分:0)
这花了我一段时间才能弄清楚。 下面的代码对我来说很好。
Microsoft.Office.Interop.Word.Paragraph paraTitle = document.Content.Paragraphs.Add(ref missing);
paraTitle.Range.Text = ""; //This line does the trick here
paraTitle.Range.set_Style(WdBuiltinStyle.wdStyleHeading1);
paraTitle.Range.Text = text;
这将应用整个样式,而不仅仅是格式。