如何使用c#Excel.Interop从Excel工作表中获取现有范围名称?

如何使用c#Excel.Interop从Excel工作表中获取现有范围名称?,c#,excel,office-interop,C#,Excel,Office Interop,我正在使用一个非常大的工作表,它有许多命名范围。我希望工作表将来会被修改,因此我无法使用单元格编号与单元格进行交互 如何从工作表中获取现有名称(或现有名称列表)?或者,我怎样才能告诉我的C#程序某个名称已经存在,并利用它呢?你在找这样的东西吗?在这个解决方案中,我把它们放在字典中 Dictionary<string, Worksheet> dictionary = new Dictionary<string, Worksheet>(); foreach ( Workshe

我正在使用一个非常大的工作表,它有许多命名范围。我希望工作表将来会被修改,因此我无法使用单元格编号与单元格进行交互


如何从工作表中获取现有名称(或现有名称列表)?或者,我怎样才能告诉我的C#程序某个名称已经存在,并利用它呢?

你在找这样的东西吗?在这个解决方案中,我把它们放在字典中

Dictionary<string, Worksheet> dictionary = new Dictionary<string, Worksheet>();
foreach ( Worksheet worksheet in ws.Worksheets )
{
   dictionary.Add( worksheet.Name, worksheet );
}

请参阅查看您想要的属性

您正在寻找类似的属性吗?在这个解决方案中,我把它们放在字典中

Dictionary<string, Worksheet> dictionary = new Dictionary<string, Worksheet>();
foreach ( Worksheet worksheet in ws.Worksheets )
{
   dictionary.Add( worksheet.Name, worksheet );
}

请参阅查看您要使用的属性

您要使用的Excel.Worksheet.Names

foreach (Excel.Worksheet sheet in wb.Sheets) {
    foreach (Excel.Range range in sheet.Names) {
        // this is the named ranges
     }
}

如果要使用,可以这样做(非常简单)


这将打开指定的文件,遍历工作簿中包含的工作表,并检查其中名为“NamedRange”的命名范围。

您将使用Excel.Worksheet.Names

foreach (Excel.Worksheet sheet in wb.Sheets) {
    foreach (Excel.Range range in sheet.Names) {
        // this is the named ranges
     }
}

如果要使用,可以这样做(非常简单)


这将打开指定的文件,遍历工作簿中包含的工作表,并检查其中名为“NamedRange”的命名范围。

Ben Black回答的替代方法对我有效:

foreach (Excel.Worksheet sheet in wb.Sheets) {
    foreach (Excel.Name name in sheet.Names) {        
        var value = sheet.get_Range(name.NameLocal).Value;//get value of named range
        var formula = sheet.get_Range(name.NameLocal).Formula;//get Formula of named range
 }
}

本·布莱克的答案的另一种选择对我很有用:

foreach (Excel.Worksheet sheet in wb.Sheets) {
    foreach (Excel.Name name in sheet.Names) {        
        var value = sheet.get_Range(name.NameLocal).Value;//get value of named range
        var formula = sheet.get_Range(name.NameLocal).Formula;//get Formula of named range
 }
}


Sheet1.范围(“A3:A7”)
什么?这列出了工作表的名称,如Sheet1、Sheet2、Sheet3,他想要的是工作表本身中命名范围的列表,这意味着他需要使用
名称
成员,而不是
名称
成员。此外,您计划如何迭代Excel应用程序的工作表集合?您需要遍历工作簿的Sheets集合,而不是Excel应用程序本身。如果您发布一些代码并更好地向我解释问题,我将尝试以更好的方式帮助您。我没有问题,我已经回答了上面的问题,我只是在更正您的代码。您无法遍历
Excel.Application
Sheets
集合,请尝试一下,看看会发生什么。
Sheet1.Range(“A3:A7”)
什么?这列出了工作表的名称,如Sheet1、Sheet2、Sheet3,他想要的是工作表本身中命名范围的列表,这意味着他需要使用
名称
成员,而不是
名称
成员。此外,您计划如何迭代Excel应用程序的工作表集合?您需要遍历工作簿的Sheets集合,而不是Excel应用程序本身。如果您发布一些代码并更好地向我解释问题,我将尝试以更好的方式帮助您。我没有问题,我已经回答了上面的问题,我只是在更正您的代码。您无法反复浏览
Excel.Application
工作表
集合,请尝试一下,看看会发生什么。请注意,为了让自己更轻松,建议在涉及互操作时使用插件,因为它的文档和intellisense很少。LINQtoExcel和EPPlus都是令人惊叹的高效插件,在C#中使用Excel时,我离不开它们。请注意,为了让自己更轻松,建议在涉及互操作时使用插件,因为它的文档和intellisense很少。LINQtoExcel和EPPlus都是令人惊叹的高效插件,在C#中使用Excel时,我离不开它们——谢谢!这是一个很大的帮助。我为迟来的回复道歉,但我正在试图弄清楚如何使用ePlus。我使用NuGet package命令行安装了这个包。我说了
使用OpenOfficeXml在顶部,但我仍然在您的行中收到错误
返回ws.Names.Where(n…
。Intellisense不喜欢“Where”,不会为我提供任何修复。有帮助吗?如果它没有对
.Where()的引用
那么这可能意味着你没有正确的
使用
语句。在我看来,这需要
使用系统。Linq
我很确定你可以直接从工作簿中获取名称,而不是遍历每一页:。但还没有测试它。谢谢!这是一个很大的帮助。我很抱歉对于迟来的响应,但我正在尝试了解如何使用EPPlus。我使用NuGet package命令行安装了该包。我在顶部声明了使用OpenOfficeXml;
,但是我仍然在您的行中收到错误
返回ws.Names.Where(n…
。Intellisense不喜欢“Where”并且不会向我提供任何修复。有什么帮助吗?如果它没有对
.Where()的引用
那么这可能意味着你没有正确的
使用
语句。在我看来,这需要
使用系统。Linq
我很确定你可以直接从工作簿中获取名称,而不是重复每一页:。但还没有测试它。