使用VSTO访问c#类文件中的Excel工作表

本文关键字:Excel 工作 文件 VSTO 访问 使用 | 更新日期: 2023-09-27 18:05:56

我使用VSTO模板(VS2010, Excel2007)创建了一个Excel插件。在解决方案资源管理器中,我有一个名为Excel的组,在它下面有一个名为ExcelAddIn.cs的文件。它可以通过像

这样的代码访问活动工作表
public partial class MyAddIn
{
    Excel.Worksheet activeWorksheet = (Excel.Worksheet)Application.Activesheet;
    Excel.Range firstRow = activeWorksheet.get_Range("A1",missing);
}

等。这段代码工作得很好。我可以使用Excel模型。

而不是把我所有的处理代码在这一个类文件,然而,我想在Excel工作表数据在另一个类文件。我已经创建了这个文件,但我无法使用任何代码像上面的,即。我似乎无法从这个文件访问Excel模型。我用Microsoft.Office.Tools复制了它。Excel的引用,但放入一行:

Excel.Worksheet activeWorksheet = (Excel.Worksheet)Application.Activesheet;

给我一个'名称'应用程序'不存在于当前上下文中'错误。

关于我需要从这个单独的类文件中获得Excel模型的引用/更改的任何想法?

顺便说一句。有效的文件指的是Excel。第一行代码的Application'对象,第二个单独的不起作用的文件引用的是'Microsoft.Office.Interop。Excel对象。

谢谢皮特

====找到答案====从您添加的其他类获取工作表的方法是简单地访问

Globals.ThisAddIn.Application.ActiveSheet;
例如:

Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddin.Application.ActiveSheet;

其中"ThisAddIn"是向导创建的类的名称(您可能已经重命名了它)。

因此,使用全局变量在ThisAddin代码之外获取Excel对象

使用VSTO访问c#类文件中的Excel工作表

你自己的答案:

从您添加的其他类中获取工作表的方法是简单地访问
Globals.ThisAddIn.Application.ActiveSheet;
例如:

Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddin.Application.ActiveSheet;

其中"ThisAddIn"是向导创建的类的名称(您可能已经重命名了它)。

因此,使用全局变量在ThisAddin代码之外获取Excel对象

这可能是因为只有在Excel可执行文件运行时应用程序才存在?请记住Addins是专门为此设计的,并且可以在后台有一个"特殊的酱汁",让它可以与Office类交互。

我认为你不能给Application打电话。作为你正在调用的类的另一个类的活动表完全不知道应用程序的存在。

我意识到我可能有点漫无边际,我希望其中一些是有意义的:)

简而言之,不,我不相信你可以调用Application。除非或者你在你的类实例化中通过构造函数传递了'Application'对象。

MyClass c = new MyClass(this.Application);

public class MyClass
{
    public MyClass(Application app)
    {
        // And from here manipulate the Application object (just be sure you've added the reference to the namespace that the Application object uses)
    }
}

我不确定如果这将工作,虽然我目前没有我的虚拟机启动:)

祝你好运!