1

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接口不支持程序(命令)。但为什么?为什么会出现在智能感知和编译中?有解决方法吗?

4

2 回答 2

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

所以问题可能出在你的设置上。该消息相当模糊,它说 word 不能做任何事情,对于其他示例,请查看C# 和 Word2010:DeleteAllComments 抛出“此命令不可用”。通过 .NET 自动化在 Word 文档中搜索和替换

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

于 2013-09-02T17:44:44.907 回答
1

我发现了问题。

Vadim 发布的示例代码很有帮助,因为它确实有效,我慢慢地转换成我的代码并最终破坏了它,它们来回移动,直到我找到问题所在。

但是,我无法解释我发现了什么!

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

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

奇怪的。

谢谢你的帮助。

于 2013-09-08T12:38:17.810 回答