[英]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.