无法从C#设置Word样式的基本样式

时间:2013-08-31 11:47:19

标签: c# ms-word styles interop

  

Microsoft.Office.Interop.Word版本14.0.0.0。 .NET 4.0 VS 2010。

MS Word API的Style类有一个BaseStyle属性,可用于设置样式的基础(基于)样式。在VBA中,这个属性适合我。

然而,从使用Word interopt的C#开始,没有BaseStyle属性。但是,有两个(据我所知,没有记录)函数set_BaseStyle()和get_BaseStyle()。

当我调用set_BaseStyle()时,我收到一条带有消息的COMException:

  

“此命令不可用。”

我认为这意味着COM接口不支持该过程(命令)。但为什么?为什么它出现在intellisense和编译?有解决方法吗?

2 个答案:

答案 0 :(得分:3)

这个简单的例子适用于我的机器(VS 2012,Office 2007)

        Application application = new Application {Visible = true};

        string styleName1 = "Heading 1";
        object styleNameObject1 = styleName1;

        string styleName2 = "Heading 2";
        object styleNameObject2 = styleName2;

        var document = application.Documents.Add();
        document.Select();

        application.Selection.set_Style(ref styleNameObject2);
        Style style = (Style)application.Selection.get_Style();
        Style baseStyle = style.get_BaseStyle();
        style.set_BaseStyle(ref styleNameObject1);

        application.Selection.Range.Text = "This is the title";
        application.Quit(false);

所以问题可能在于你的设置。该消息相当模糊,并且表示单词无法执行操作,其他示例请查看C# and Word2010 : DeleteAllComments throws "This command is not available."search and replace in Word documents via .NET automation

文件只读吗?是否与其他样式或更简单的文件(例如我的示例)一起发生? Word中是否允许使用宏?

答案 1 :(得分:1)

我发现了问题。

Vadim发布的示例代码是一个很大的帮助,因为它确实有效,我慢慢地转换到我的代码并最终破坏它,它们来回移动直到我回答问题。

然而,我无法解释我发现了什么!

当我使用Application.Documents.Open()打开(现有)文档时,我正在指定所有参数。事实证明,如果我为isvisible参数指定false(0),则代码将失败。如果我断开真(-1)它可以工作。

请注意,在任何一种情况下,我都可以对文档进行100次其他更改。出于某种原因,如果不可见,我无法更改基本样式。

奇怪。

感谢您的帮助。