簡體   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