繁体   English   中英

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

[英]Access Excel Worksheet in C# class file using VSTO

我使用 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 model 获得。

然而,我不想将我所有的处理代码放在这个 class 文件中,而是想在另一个 class 文件中处理 Excel 工作表数据。 我已经创建了这个文件,但我无法在其中使用任何类似上面的代码,即。 我似乎无法从此文件中访问 Excel model。 我已经复制了“使用 Microsoft.Office.Tools.Excel”的引用,但添加了如下一行:

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

给我一个“当前上下文中不存在名称‘应用程序’”错误。

关于我需要从这个单独的 class 文件中获取 Excel model 的参考/更改有什么想法吗?

顺便提一句。 有效的文件是指第一个代码行的“Excel.Application”object,第二个不起作用的单独文件是指“Microsoft.Office.Interop.Excel”object。

谢谢皮特

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

Globals.ThisAddIn.Application.ActiveSheet;

例如:

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

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

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

你自己的答案在这里:

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

Globals.ThisAddIn.Application.ActiveSheet;

例如:

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

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

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

可能是因为应用程序仅在 Excel 可执行文件运行时才存在? 请记住,插件是专门为此设计的,并且可以在后台使用“特殊调味料”,使其与 Office 类进行交互。

我认为您无法从另一个 class 调用 Application.Activesheet,因为您调用的 Class 完全不知道该应用程序的存在。

我意识到我可能有点漫无边际,我希望其中一些有意义:)

简而言之,不,我不相信您可以这样调用 Application.Activesheet,除非您通过class实例中的构造函数传递了“应用程序”object。

IE。

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)
    }

}

我不确定这是否可行,因为我目前没有启动我的虚拟机:)

祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM