Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在独立应用程序中使用VSTO访问Excel工作表_C#_.net_Excel_Interop_Vsto - Fatal编程技术网

C# 在独立应用程序中使用VSTO访问Excel工作表

C# 在独立应用程序中使用VSTO访问Excel工作表,c#,.net,excel,interop,vsto,C#,.net,Excel,Interop,Vsto,我试着研究这个问题,但有时我似乎缺乏一些谷歌搜索技巧 我想开发一个(独立的)WinForms应用程序,它使用自动化与Excel进行通信。我已经知道如何使用互操作,但我认为VSTO工具将提供一种更舒适或更复杂的方法 我的想法是: 我可以用准备好的excel参考构建一个新的独立项目 我可以使用VSTO提供的更复杂的对象模型与Excel进行通信 然而,到目前为止,我的发现让我想到: VSTO只能用于为Excel生成加载项/工作表,不能用于构建独立应用程序 没有比Interop提供的对象模型更复杂

我试着研究这个问题,但有时我似乎缺乏一些谷歌搜索技巧

我想开发一个(独立的)WinForms应用程序,它使用自动化与Excel进行通信。我已经知道如何使用互操作,但我认为VSTO工具将提供一种更舒适或更复杂的方法

我的想法是:

  • 我可以用准备好的excel参考构建一个新的独立项目
  • 我可以使用VSTO提供的更复杂的对象模型与Excel进行通信
然而,到目前为止,我的发现让我想到:

  • VSTO只能用于为Excel生成加载项/工作表,不能用于构建独立应用程序
  • 没有比Interop提供的对象模型更复杂的对象模型了(它有一些丑陋的东西,比如区域设置错误、“Open”(Missing,Missing,Missing…)方法等等)
  • 我在VSTO命名空间中找到了一个工作表和工作簿类,但据我所知,它们总是指在定义Excel加载项或工作簿扩展时实现的工作表和工作簿的CS类。-它们不能在独立应用程序中用作舒适的包装器
有人能证实这些说法或纠正我的错误吗

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

Thx,
chiccodoro

VSTO用于开发Office附加组件,而不是单独的应用程序

要从外部应用程序自动化Office,COM互操作仍然是一种方法。如果您可以使用.NET 4.0(和Visual Studio 2010),则可以访问,这使互操作变得更加愉快

例如,在.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)
Workbooks.Open(thisFileName)
在.NET 4.0中,您可以编写以下内容:

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)
Workbooks.Open(thisFileName)

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

与此同时,我了解了另一个使Office编程更舒适的工具集:VSTO Power Tools。虽然由VSTO团队构建,但它们也可用于独立应用程序。它们包含允许>
Workbooks.Open(thisFileName)
但它们仍然不能解决我目前遇到的几个问题,例如:

  • 一旦所有COM对象的引用超出范围,立即正确释放它们