【问题标题】:Read or retrieve value from spreadsheet using existing rangenames使用现有范围名称从电子表格中读取或检索值
【发布时间】:2016-10-06 09:01:53
【问题描述】:

我有一个现有的 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 从定义的名称中检索或读取单元格值?

【问题讨论】:

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


    【解决方案1】:

    访问命名范围

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

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

    // 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

    【讨论】:

      【解决方案2】:

      我想你正在寻找这个

      using System.Xml;
      
      XmlNodeList elemList = doc.GetElementsByTagName(@"XML node");
      
                      for (int i = 0; i < elemList.Count; i++)
                      {
                          //dosomthing with   
                          elemList[i].Attributes["AttributeName"].Value;
                      }  
      

      问候

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-13
        相关资源
        最近更新 更多