使用现有范围名称从电子表格中读取或检索值

时间:2016-10-06 09:01:53

标签: c# .net excel openxml-sdk closedxml

我有一个现有的excel文件,它已经定义了单元名称或单元格区域名称。

我可以使用Openxml sdk获取所有单元格区域名称。我的示例代码如下:

 var path = @"D:\test.xlsx";
        using (var document = SpreadsheetDocument.Open(path, true))
        {
            var workbookPart = document.WorkbookPart;
              var wb = workbookPart.Workbook;
            var definedNames = wb.DefinedNames;
            if (definedNames != null)
            {
                System.Console.WriteLine("Name\tText\tName.Value");
                foreach (DefinedName dn in definedNames)
                {
                    System.Console.WriteLine(dn.Name + "\t" + dn.Text + "\t" + dn.Name.Value);

                }
            }

        }

有没有办法使用此OpenXml或c#中的任何其他SDK从已定义的名称检索或读取单元格值?

2 个答案:

答案 0 :(得分:2)

访问命名范围

如果您有一个或多个命名范围,则可以通过不同方式访问它们:

指定范围内的特定范围/单元格

// worksheet scope
var range = worksheet.Range("NameOfTheRange");
var cell = worksheet.Cell("NameOfTheRange");

// workbook scope
var range = workbook.Range("NameOfTheRange");
var cell = workbook.Cell("NameOfTheRange");

指定范围内指定的所有范围/单元格(是指定范围可指向多个范围/单元格)

// worksheet scope
var ranges = worksheet.Ranges("NameOfTheRange");
var cells = worksheet.Cells("NameOfTheRange");

// workbook scope
var ranges = workbook.Ranges("NameOfTheRange");
var cells = workbook.Cells("NameOfTheRange");

工作簿中的工作表范围
访问命名范围的一种方便方法是从工作簿访问工作表的范围 例如:

var range = workbook.Range("Sheet1!Result");
var cell = workbook.Cell("Sheet1!Result");

<强>范围:
如果您在工作表中要求命名范围,那么ClosedXML将查看工作表,然后查看工作簿是否找不到它。

例如,在创建具有工作簿范围的命名范围后,您可以从工作簿或工作表中访问它(只要工作表上没有一个。

// Create a range with workbook scope (the default)
worksheet.RangeUsed().AddToNamed("Result");

// Access it from the workbook:
var range = workbook.Range("Result");

// Access it from the worksheet:
// What happens here is that it will try to get the named range
// on the worksheet, when it fails it then gets the named range
// on the workbook
var range = worksheet.Range("Result");

无法找到它?
如果命名范围不存在,则返回null。

参考:Accessing Named Ranges

答案 1 :(得分:0)

我认为你正在寻找这个

using System.Xml;

XmlNodeList elemList = doc.GetElementsByTagName(@"XML node");

                for (int i = 0; i < elemList.Count; i++)
                {
                    //dosomthing with   
                    elemList[i].Attributes["AttributeName"].Value;
                }  

问候