我正在尝试使用Excel对象库v.15创建一个与Excel交互的WinForms应用程序。
我正在使用它来获取Excel应用程序对象
(Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
我知道我可以使用
获取我想要的命名表的范围_application.Range["MyTableName"];
现在,我遇到的问题是,如果我同时打开了两个工作簿,并且每个工作簿都有一个同名的命名表,我不知道将返回哪个范围。
Excel应用程序是唯一的,因此我不能简单地尝试基于窗口标题或类似的东西获取进程。 我可以根据标题得到Workbook对象:
_application.Workbooks.Cast<Workbook>().FirstOrDefault(w.Name.Equals(title))
但是我无法访问特定工作簿的范围。 我知道我可以遍历工作簿元素的表格,试图找到表格,但我想知道是否还有另一种“更清洁”的方式。
我很感激任何指导方针。
谢谢,
答案 0 :(得分:0)
我能想到的最简单/最直接的方法是遍历Names collection,检查父级,继续前进。
例如:
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