2015-08-08 101 views
0

我試圖創建一個使用Excel對象庫v.15與Excel進行交互的WinForms應用程序。Excel Interop:從特定工作簿獲取命名錶(範圍)

我使用該工具來獲取Excel應用程序對象

(Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 

而且我知道我可以用

_application.Range["MyTableName"]; 

現在獲得指定的表我想要的範圍,這個問題我面臨的問題是,如果我同時打開兩個工作簿,並且每個工作簿都有一個具有相同名稱的命名錶,我不知道將返回哪個範圍。

該Excel應用程序是獨一無二的,所以我不能簡單地嘗試獲取基於窗口標題或類似的東西的過程。 我可以根據其標題得到Workbook對象:

_application.Workbooks.Cast<Workbook>().FirstOrDefault(w.Name.Equals(title)) 

但是我不能訪問特定工作簿的範圍。 我知道我可以遍歷工作簿元素的表格,試圖找到表格,但我想知道是否有另一種「更清潔」的方式。

我希望對此有任何指導。

感謝,

  • 威爾

回答

0

最簡單/最直接的方式,我能想到的是通過Names collection迭代,檢查父,然後繼續前進。

E.g:

For Each NamedRange as Range in MyApplication.Names 
    Dim Check as Object = TryCast(NamedRange.Parent, Workbook) 
    If Check Is Nothing Then 
     Check = TryCast(NamedRange.Parent, Worksheet) 
     Check = TryCast(Check.Parent, Workbook) 
    End If 

    If Not Check Is Nothing AndAlso Check.Name = "MyWorkbook" Then 
     'Do something 
    End If 
Next 
相關問題