VSTO 加载项,同时访问 Excel 和 Word
VSTO add-in, access to both Excel and Word
我正在使用 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 应用程序对象模型?
Is it possible to access the Microsoft.Office.Tools.Word objects in the same add-in as Microsoft.Office.Tools.Excel objects
也许不是那些确切的类型,但你可以找到类似的东西。您始终可以完全下降到纯 COM/Ole 自动化级别 by-passing VSTO APIs。 Office 仍在公开一个 COM API,我怀疑它只是将 VSTO 包装到更好的 c# 类.
例如从 c# Excel VSTO add-in 你可以通过以下方式启动 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-type 库.它是版本中立的,因此它应该适用于任何 Word 版本。
I know I can use the normal Microsoft.Office.Interop.Word/Excel objects, but they aren't as useful.
什么意义上的?
另见
- Where to find OLE Automation's documentation, specifically this answer
免责声明我从来没有做过任何分享add-in我要在这里谈谈(@Cindy Meister会知道更多)
在 VS 2010 之前,您可以创建一个名为 Office Shared 的项目 add-in。 Here is how it looked like in VS 2003
这可能是您需要的东西,但如前所述,它已不再可用,而且我似乎记得它还是存在一些问题。
我发现这个 post 人试图使用模仿 Office Shared add-in 模板的东西。他声称它有效,因此值得一试。
否则你将不得不使用 Office PIA 作为@MickyD 回答
我正在使用 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 应用程序对象模型?
Is it possible to access the Microsoft.Office.Tools.Word objects in the same add-in as Microsoft.Office.Tools.Excel objects
也许不是那些确切的类型,但你可以找到类似的东西。您始终可以完全下降到纯 COM/Ole 自动化级别 by-passing VSTO APIs。 Office 仍在公开一个 COM API,我怀疑它只是将 VSTO 包装到更好的 c# 类.
例如从 c# Excel VSTO add-in 你可以通过以下方式启动 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-type 库.它是版本中立的,因此它应该适用于任何 Word 版本。
I know I can use the normal Microsoft.Office.Interop.Word/Excel objects, but they aren't as useful.
什么意义上的?
另见
- Where to find OLE Automation's documentation, specifically this answer
免责声明我从来没有做过任何分享add-in我要在这里谈谈(@Cindy Meister会知道更多)
在 VS 2010 之前,您可以创建一个名为 Office Shared 的项目 add-in。 Here is how it looked like in VS 2003 这可能是您需要的东西,但如前所述,它已不再可用,而且我似乎记得它还是存在一些问题。
我发现这个 post 人试图使用模仿 Office Shared add-in 模板的东西。他声称它有效,因此值得一试。
否则你将不得不使用 Office PIA 作为@MickyD 回答