7

我承认,我对使用 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();
}

然后我用 eg 调用它AddParagraph("A title", "Heading 1");,但是使用上述包装器构建我的文档的结果是,没有应用完整的样式,只有字体、颜色、大小和粗体/斜体。

我正在使用自己的.dotx文件,具有自己定义和命名的样式,但只需从 Remou 复制代码就可以使用我自己的模板,所以我认为这不是问题,并且使用该代码我无法弄清楚如何附加多个段落,每个段落都有自己的样式。

谁能指出我的方法有什么问题,或者至少我怎样才能使 Remou 提供的答案满足我的要求?:)

4

2 回答 2

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();
于 2012-08-30T09:30:28.783 回答
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;

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

于 2019-01-04T08:34:11.980 回答