我使用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对象。
答案 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:)
祝你好运!