【问题标题】:Using VSTO in a standalone application to access Excel sheets在独立应用程序中使用 VSTO 访问 Excel 工作表
【发布时间】:2025-11-23 11:45:01
【问题描述】:

试图对此进行研究,但有时我似乎缺乏一些谷歌搜索技能......

我想开发一个(独立的)WinForms 应用程序,它使用自动化与 Excel 进行通信。我已经知道如何使用 Interop,但我认为 VSTO 工具会提供一种更舒适或更复杂的方式来做到这一点。

我的想法是:

  • 我可以使用准备好的 Excel 参考构建一个新的独立项目。
  • 我可以使用 VSTO 提供的更复杂的对象模型与 Excel 进行通信。

但是,到目前为止,我的发现让我认为:

  • VSTO 只能用于为 Excel 构建加载项/工作表,不能用于构建独立应用程序
  • 没有比 Interop 提供的对象模型更复杂的对象模型(它具有诸如语言环境错误、“Open(Missing, Missing, Missing...)”方法等丑陋的东西。
  • 我在 VSTO 命名空间中找到了一个 Worksheet 和一个 Workbook 类,但据我了解,这些总是指您在定义 Excel 加载项或工作簿扩展时实现的工作表和工作簿的 CS 类。 - 它们不能用作独立应用程序中的舒适包装器。

任何人都可以确认这些陈述或纠正我的错误吗?

此外,如果应该有一种方法可以使用 VSTO 及其“工作簿”类从独立应用程序中加载 excel 工作簿,那么我该怎么做 ?

谢谢, 奇科多罗

【问题讨论】:

    标签: c# .net excel interop vsto


    【解决方案1】:

    VSTO 用于开发 Office 插件,而不是单独的应用程序。

    对于从外部应用程序自动化 Office,COM 互操作仍然是实现它的方法。如果您可以使用 .NET 4.0(和 Visual Studio 2010),那么您可以访问 Named and Optional Arguments,这让 Interop 变得更加愉快。

    例如,在 .NET 3.5 中,您会这样写:

    Workbooks.Open(thisFileName,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing)
    

    在 .NET 4.0 中你可以这样写:

    Workbooks.Open(thisFileName)
    

    我不相信您可以在外部应用程序中使用 VSTO 命名空间中的对象。

    【讨论】:

      【解决方案2】:

      与此同时,我了解了另一组让 Office 编程更舒适的工具:VSTO 电动工具。虽然由 VSTO 团队构建,但它们也可用于独立应用程序。它们包含允许

      Workbooks.Open(thisFileName)
      

      他们仍然没有解决我迄今为止遇到的几个问题,例如

      • locale bug
      • 只要所有 COM 对象的引用超出范围,就正确释放它们。

      【讨论】:

        最近更新 更多