VSTO加载项,访问Excel和Word

时间:2018-04-05 22:32:33

标签: c# vsto office-interop

我正在使用C#编写Word 2010(.NET Framework 4.6.1)的VSTO加载项。此加载项旨在使用来自少数几个来源的数据从模板生成Word文档,其中一些(取决于)是一个或多个Excel工作簿。

我一直在阅读MSDN文献,但我觉得我错过了一个关键的步骤。

是否可以在与Microsoft.Office.Tools.Excel对象相同的加载项中访问Microsoft.Office.Tools.Word对象?它们每个似乎都依赖于Factory.GetVstoObject()方法,该方法使用特定于应用程序的工厂对象。我知道我可以使用普通的Microsoft.Office.Interop.Word/Excel对象,但它们并没有那么有用。

我一直在玩两个插件,一个针对Word,一个针对Excel,但我很难让他们看到对方。如果这不能作为VSTO加载项实现,您可以在独立的可执行文件中引用多个Office应用程序对象模型吗?

2 个答案:

答案 0 :(得分:0)

  

是否可以在与Microsoft.Office.Tools.Excel对象相同的加载项中访问Microsoft.Office.Tools.Word对象

也许不是那些确切的类型,但你可以找到类似的东西。您可以通过VSTO API完全降低到纯COM / Ole自动化级别。 Office仍在暴露一个COM API,我怀疑VSTO只是包含在更好的c#类中。

e.g。从c#Excel VSTO加载项中,您可以通过以下方式启动Word文档:

try
{
    var type = Type.GetTypeFromProgID("Word.Application");
    dynamic app = Activator.CreateInstance(type);
    app.Visible = true;

    dynamic doc = app.Documents.Add();
    doc.Content.InsertAfter("Hello world!");
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

注意:我正在使用dynamic(c#中dynamic的主要目的之一是使COM更容易),以避免依赖任何特定的COM类型库。它的版本是中性的,所以它应该适用于任何Word版本。

  

我知道我可以使用正常的Microsoft.Office.Interop.Word / Excel对象,但它们没那么有用。

在什么意义上?

另见

答案 1 :(得分:0)

免责声明我从来没有做过任何共享加载项,我将在这里讨论(@ Cindy Meister会知道更多)

直到VS 2010,您可以创建一个名为Office Shared add-in的项目。 Here is how it looked like in VS 2003 这可能是你需要的东西,但据说它不再可用,我似乎还记得它有一些问题。

我发现这个post,其中的人试图使用模仿Office Shared外接程序模板的东西。他声称这样做是值得尝试的。

否则您必须使用Office PIA作为@ MickyD回答