Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VSTO访问C#类文件中的Excel工作表_C#_Excel_Vsto - Fatal编程技术网

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

使用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 =

我使用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;
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对象。我认为您需要选择“添加另一个答案”(或类似的内容),发布您的解决方案,然后您可以将其标记为答案。我不认为你可以在评论中标记为答案:)如果有人可以将答案代码粘贴到答案部分,问题就结束了!我不能-这里有太多的初级汉堡,皮特