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和编译?有解决方法吗?
答案 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次其他更改。出于某种原因,如果不可见,我无法更改基本样式。
奇怪。
感谢您的帮助。