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

我创build了一个使用VSTO模板(VS2010,Excel2007)的Excel插件。 在解决scheme资源pipe理器中,我有一个名为Excel的组,并在其下有一个名为ExcelAddIn.cs的文件。 这可以通过代码来访问活动工作表

public partial class MyAddIn { Excel.Worksheet activeWorksheet = (Excel.Worksheet)Application.Activesheet; Excel.Range firstRow = activeWorksheet.get_Range("A1",missing); } 

等这个代码工作正常,即。 我可以在Excel模型。

不过,我不想将所有的处理代码放在这个类文件中,而是想在另一个类文件中处理Excel工作表数据。 我已经创build了这个文件,但是无法使用上面的代码,例如。 我似乎无法从这个文件访问Excel模型。 我已经复制了“使用Microsoft.Office.Tools.Excel”引用,但放入一行:

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

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

任何想法,我需要做什么参考/更改从这个单独的类文件获取Excel模型?

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

谢谢皮特

====find答案====从你添加的其他类获取你的工作表的方式是简单的访问

 Globals.ThisAddIn.Application.ActiveSheet; 

例如:

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

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

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

你自己的答案在这里:

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

 Globals.ThisAddIn.Application.ActiveSheet; 

例如:

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

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

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

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

我不认为你将能够从另一个类调用Application.Activesheet,因为你正在调用的类完全不知道应用程序的存在。

我意识到我可能会散漫一点,我希望有一些有意义的:)

总之,不,我不认为你可以像这样调用Application.Activesheet,除非你可以通过你的类实例中的构造函数传递'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) } } 

林不知道是否会工作,因为我目前没有我的虚拟机引导了:)

祝你好运!