2015-08-08 97 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 
相关问题