Excel互操作:从特定工作簿获取命名表(范围)
本文关键字:范围 获取 工作簿 互操作 Excel | 更新日期: 2023-09-27 18:07:01
我正在尝试创建一个使用Excel对象库v.15与Excel交互的WinForms应用程序。
我使用这个来获取Excel应用程序对象
(Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
我知道我可以通过
得到指定表的范围_application.Range["MyTableName"];
现在,我面临的问题是,如果我有两个工作簿同时打开,每个工作簿都有一个同名的命名表,我不知道将返回哪个范围。
Excel应用程序是唯一的,所以我不能简单地尝试基于窗口标题或类似的东西来获取过程。我可以根据它的标题获得工作簿对象:
_application.Workbooks.Cast<Workbook>().FirstOrDefault(w.Name.Equals(title))
但是,我无法访问特定工作簿的范围。我知道我可以遍历工作簿元素的工作表,试图找到表,但我想知道是否有另一种"更干净"的方式。
如果有任何关于这方面的指导,我将不胜感激。
谢谢,
我能想到的最简单/最直接的方法是遍历Names集合,检查父元素,然后继续。
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