首页 文章

如何在C#中应用Word快速风格 - 不只是简单的格式化而是整个风格?

提问于
浏览
7

我承认,我对使用Interop库非常陌生,但人们似乎总是给出的建议是,记录一个宏并查看vba代码 . 问题是,宏没有准确记录我正在做的事情:单击快速样式将其应用于当前选择 .

我的任务很简单: I need to apply a Quick Style to a Paragraph (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为我的要求提供答案? :)

1 回答

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

相关问题