【问题标题】:Access Excel Worksheet in C# class file using VSTO使用 VSTO 访问 C# 类文件中的 Excel 工作表
【发布时间】:2011-10-28 20:53:04
【问题描述】:

我使用 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;

例如:

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

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

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

【问题讨论】:

  • 如果有人可以将答案代码粘贴到答案部分,那么问题就结束了!我不能 - 这里有太多的初级汉堡。Pete

标签: c# excel vsto


【解决方案1】:

您自己的答案在这里:

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

Globals.ThisAddIn.Application.ActiveSheet;

例如:

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

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

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

【讨论】:

    【解决方案2】:

    可能是因为应用程序仅在 Excel 可执行文件运行时才存在?请记住,插件是专门为此设计的,并且可以在后台添加“特殊调味料”,使其与 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)
        }
    
    }
    

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

    祝你好运!

    【讨论】:

    • 感谢 Adam G。我想你在这里。我想知道人们在这种情况下通常会做什么,因为我无法想象他们会将所有处理代码限制在 add in 类中,但我可能错了......去。再次感谢皮特
    • 找到了答案(但我还不能回答我的问题!)从您添加的其他类中获取工作表的方法是简单地访问 Globals.ThisAddIn.Application.ActiveSheet;例如:Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddin.Application.ActiveSheet;其中“ThisAddIn”是您的向导创建的类的名称(您可能已重命名它)。因此,使用 Globals 在 ThisAddin 代码之外获取您的 Excel 对象。
    • 我认为您需要选择“添加另一个答案”(或类似内容),发布您的解决方案,然后您可以将其标记为答案。我认为您不能在 cmets 中标记为答案 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多