【问题标题】:How to apply a Word Quick Style in C# - not just simple formatting but the entire style?如何在 C# 中应用 Word 快速样式 - 不仅仅是简单的格式,而是整个样式?
【发布时间】:2012-08-24 19:51:51
【问题描述】:

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

我的任务很简单:我需要为段落应用快速样式(Microsoft.Office.Interop.Word.Paragraph。但是,使用 set_style 命令仅应用基本格式,并且段落保持其原始快速样式选择(普通)。

使用 Remou 的方法虽然对我有用,但它似乎与我自己的代码非常相似,我无法使其工作,我认为这可能是我对 objectmodel 的理解有点偏离。

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 提供的答案满足我的要求? :)

【问题讨论】:

    标签: c# interop ms-word styling


    【解决方案1】:

    这对我有用。

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

    【讨论】:

    • 谢谢 Remou,我已经更新了我的问题,因为你让我更接近了一点,但不是一路。我可能走错了路。
    • ...我傻眼了。更改应用样式和文本的顺序就是这样做的,`+parange.Range.Text;` 部分是我尝试并错误复制的旧东西。谢谢您的帮助! :)
    【解决方案2】:

    我花了一段时间才弄明白。 那么下面的代码对我来说很好。

    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;
    

    这将应用整个样式,而不仅仅是格式。

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 2021-08-04
      • 1970-01-01
      • 2011-06-23
      • 2019-05-02
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多