使用VSTO访问C#类文件中的Excel工作表
我使用VSTO模板(VS2010、Excel2007)创建了一个Excel加载项。 在解决方案资源管理器中,我有一个名为Excel的组,在该组下有一个名为ExcelAddIn.cs的文件。这可以通过以下代码访问活动工作表:使用VSTO访问C#类文件中的Excel工作表,c#,excel,vsto,C#,Excel,Vsto,我使用VSTO模板(VS2010、Excel2007)创建了一个Excel加载项。 在解决方案资源管理器中,我有一个名为Excel的组,在该组下有一个名为ExcelAddIn.cs的文件。这可以通过以下代码访问活动工作表: public partial class MyAddIn { Excel.Worksheet activeWorksheet = (Excel.Worksheet)Application.Activesheet; Excel.Range firstRow =
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;
Globals.ThisAddIn.Application.ActiveSheet;
例如:
Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddin.Application.ActiveSheet;
Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddin.Application.ActiveSheet;
其中“ThisAddIn”是向导创建的类的名称(您可能已重命名它)
所以,使用Globals获取ThisAddin代码之外的Excel对象。这可能是因为应用程序只有在Excel可执行文件运行时才存在?请记住,加载项是专门为此而设计的,并且可以在后台使用“特殊酱汁”,使其与Office类交互 我认为您无法从另一个类调用Application.Activesheet,因为您从中调用的类完全不知道应用程序的存在 我意识到我可能有点漫无边际,我希望其中一些是有意义的:) 简而言之,不,我不相信你可以像那样调用Application.Activesheet,除非可能你通过类实例中的构造函数传递了“Application”对象 即 我不确定这是否可行,因为我目前没有启动我的虚拟机:) 祝你好运 您自己的答案如下: 从您添加的其他类获取工作表的方法是访问
Globals.ThisAddIn.Application.ActiveSheet;
Globals.ThisAddIn.Application.ActiveSheet;
例如:
Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddin.Application.ActiveSheet;
Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddin.Application.ActiveSheet;
其中“ThisAddIn”是向导创建的类的名称(您可能已重命名它)
因此,使用Globals获取ThisAddin代码之外的Excel对象。谢谢Adam G。我想您已经了解了。我想知道在这种情况下人们通常会做什么,因为我无法想象他们会将所有的处理代码限制在外接程序类中,但我可能错了……我将尝试一点传递,看看它是如何进行的。再次感谢您找到了答案(但我还不能回答我的问题!)从您添加的其他类获取工作表的方法是访问Globals.ThisAddIn.Application.ActiveSheet;例如:Excel.Worksheet ws=(Excel.Worksheet)Globals.ThisAddin.Application.ActiveSheet;其中“ThisAddIn”是向导创建的类的名称(您可能已重命名它)。因此,使用Globals获取ThisAddin代码之外的Excel对象。我认为您需要选择“添加另一个答案”(或类似的内容),发布您的解决方案,然后您可以将其标记为答案。我不认为你可以在评论中标记为答案:)如果有人可以将答案代码粘贴到答案部分,问题就结束了!我不能-这里有太多的初级汉堡,皮特