繁体   English   中英

用于多个系统的后期绑定互操作库 c#

[英]Late Binding Interop libraries for usage on multiple systems with c#

我正在尝试编写一个可以加载正确的 Interop office 库并检索有关该应用程序的信息的应用程序。 我一直在尝试用文字来做到这一点。

Type wordType = Type.GetTypeFromProgID("Word.Application");
dynamic word = Activator.CreateInstance(wordType);

Console.WriteLine(word.Application.ActiveWindow.Document.FullName);

我打开了一个 word 文档,但无法访问 window。它会引发错误

System.Runtime.InteropServices.COMException (0x800A1098): Dieser Befehl ist nicht verfügbar, weil kein Dokument geöf.net ist。

翻译成no Document is availabe

但是,如果我不使用后期绑定

var word = (Microsoft.Office.Interop.Word.Application)Marshal2.GetActiveObject("Word.Application");
Console.WriteLine(word.Application.ActiveWindow.Document.FullName);

我可以阅读文档文件...

如果我不能使用后期绑定,我必须编译互操作并将其与应用程序一起发布。 我的目标是它使用已安装程序的互操作(如果已安装)。

如何连接到正确的实例并读取有关活动 window 的信息?

顺便说一下苹果和橘子。 在第一个示例中,您生成了一个 Word 应用程序的新实例(没有我可能添加的任何文档),第二个示例是对现有的 Word 应用程序使用 IROT,该应用程序无疑有一个文档,因此是活动的。


在您的第一个场景中,您只是生成了一个 Word 的新实例,但没有创建一个 document 与大多数Office应用程序一样,默认情况下Word启动时没有文档。

改变:

Type wordType = Type.GetTypeFromProgID("Word.Application");
dynamic word = Activator.CreateInstance(wordType);

Console.WriteLine(word.Application.ActiveWindow.Document.FullName);

...到:

var wordType = Type.GetTypeFromProgID("Word.Application");
dynamic app = Activator.CreateInstance(wordType);
dynamic doc = app.Documents.Add(); // <---- the important bit

Console.WriteLine(doc.FullName);

也可以看看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM