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

时间:2011-08-17 11:49:01

标签: c# excel vsto

我使用VSTO模板(VS2010,Excel2007)创建了一个Excel Addin。 在解决方案资源管理器中,我有一个名为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'是您的向导创建的类的名称(您可能已将其重命名)。

因此,使用Globals来获取ThisAddin代码之外的Excel对象。

2 个答案:

答案 0 :(得分:6)

你自己的回答:

从您添加的其他课程中获取工作表的方法是简单地访问

Globals.ThisAddIn.Application.ActiveSheet;

例如:

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

其中'ThisAddIn'是您的向导创建的类的名称(您可能已将其重命名)。

因此,使用Globals来获取ThisAddin代码之外的Excel对象。

答案 1 :(得分:0)

可能是因为Application只在Excel可执行文件运行时才存在?请记住,Addins是专为此设计的,可以在后台使用“特殊酱”,使其可以与Office类进行交互。

我不认为您可以从另一个类调用Application.Activesheet,因为您调用的类完全不知道应用程序的存在。

我意识到我可能会有点懒散,我希望其中一些是有道理的。)

简而言之,我不相信你可以这样调用Application.Activesheet,除非可能你通过类instanciation中的构造函数传递'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)
    }

}

我不确定这是否会起作用,因为我目前没有启动我的VM:)

祝你好运!