本文档介绍定义名称的概念,并介绍如何管理定义的名称。
为了更容易理解工作表中包含的信息并引用单个单元格、单元格区域、公式和常量值,可以使用定义的名称。定义的名称是实现 DefinedName 接口的对象,包含以下信息。
DefinedName.Name
指示单个单元格、单元格区域、公式或常量。通常,名称会解释此名称所指对象的用途,从而更容易查找和使用此对象。
指定名称时,必须考虑特殊的语法规则。
DefinedName.RefersTo
一个字符串,指定对与已定义名称关联的单元格或单元格区域、公式或常量的引用。例如:
默认情况下,定义的名称使用绝对单元格引用,包括工作表名称。
DefinedName.Comment
定义名称随附的说明或其他信息。
注意
注释长度不能超过 255 个字符。
若要访问具有已定义名称的工作表区域,请使用Worksheet.Item 或 IWorkbook.Range属性,如以下代码段所示:
Vb.Net |
Dim myRange As DevExpress.Spreadsheet.CellRange = workbook.Range("MyRange") Dim myRange As DevExpress.Spreadsheet.CellRange = worksheet("MyRange") |
C# |
DevExpress.Spreadsheet.CellRange myRange = workbook.Range["MyRange"]; DevExpress.Spreadsheet.CellRange myRange = worksheet["MyRange"]; |
每个定义的名称都有一个范围-一个区域(单个工作表或整个工作簿),其中名称被识别并且可以不限定地使用。例如,范围是工作簿的第一个工作表(Sheet1)的已定义名称(cellName)仅在此工作表中被识别,而无需限定(例如,=5+cellName)。若要在其他工作表中使用此定义的名称,请在其前面加上定义名称所限定的工作表的名称(例如,“=5+Sheet1!cellName”)。如果定义名称 (cellName_global) 的范围是整个工作簿,则此名称在此工作簿的任何工作表中都会被识别(例如,“=5+cellName_global”)。
工作簿中包含的每个工作表以及工作簿本身都有其自己的已定义名称集合 (DefinedNameCollection),可以分别通过 Worksheet.DefinedNames 和 Workbook.DefinedNames 属性进行访问。每个名称在其作用域中必须是唯一的(使用 DefinedNameCollection.Contains 方法确定集合中是否已存在特定名称)。但是,请注意,可以在不同的作用域中使用相同的名称 。
如果使用定义的名称而不在其前面加上工作表名称,则会在使用此名称的工作表的 DefinedNameCollection 集合中搜索此名称。然后,如果在工作表中找不到该名称,则会在工作簿的已定义名称集合中搜索该名称。要显式使用全局定义名称,请在其前面加上工作簿名称(例如,“=5+WorkbookName.xlsx!cellName”)。
如果未找到定义的名称,则使用此名称的单元格将显示 #NAME? 错误。
创建和修改定义的名称时,请遵循以下规则。
可以使用 CellRange.Name 属性或 Worksheet.DefinedNames.Add 和 Workbook.DefinedNames.Add 方法创建定义的名称。
访问指定要命名的单元格或单元格区域的对象,并设置其 CellRange.Name 属性。将自动创建相应的 DefinedName 对象,并将其添加到包含命名单元格或单元格区域的工作表的 Worksheet.DefinedNames 集合中。因此,此工作表是所创建名称的范围。DefinedName.RefersTo 属性自动设置为绝对单元格引用(包括工作表名称)。
Vb.Net
Dim workbook As New DevExpress.Spreadsheet.Workbook()
Dim sheet1 As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Sheet1")
Dim sheet2 As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Sheet2")
'创建一个范围
Dim range As DevExpress.Spreadsheet.CellRange = sheet1.Range("A1:C3")
'为创建的范围指定一个名称
range.Name = "namedRange"
'根据创建的名称获得定义的名称对象
Dim definedName As DevExpress.Spreadsheet.DefinedName = sheet1.DefinedNames.GetDefinedName("namedRange")
'使用当前工作表中定义的名称
sheet1.Cells("D4").Formula = "=SUM(namedRange)"
'在其他工作表中使用定义的名称
sheet2.Cells("D4").Formula = "=SUM(Sheet1!namedRange)"
C# |
DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook(); DevExpress.Spreadsheet.Worksheet sheet1 = workbook.Worksheets["Sheet1"]; DevExpress.Spreadsheet.Worksheet sheet2 = workbook.Worksheets["Sheet2"]; // 创建一个范围 DevExpress.Spreadsheet.CellRange range = sheet1.Range["A1:C3"]; // 为创建的范围指定一个名称 range.Name = "namedRange"; // 根据创建的名称获得定义的名称对象 DevExpress.Spreadsheet.DefinedName definedName = sheet1.DefinedNames.GetDefinedName("namedRange"); // 使用当前工作表中定义的名称 sheet1.Cells["D4"].Formula = "=SUM(namedRange)"; // 在其他工作表中使用定义的名称 sheet2.Cells["D4"].Formula = "=SUM(Sheet1!namedRange)"; |
此方法允许您创建一个定义的名称,其范围是指定的工作表,并将此名称与单个单元格、单元格区域、公式或常量值相关联。
Vb.Net |
Dim workbook As New DevExpress.Spreadsheet.Workbook() Dim sheet1 As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Sheet1") Dim sheet2 As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Sheet2") '获得Sheet1工作表的自定义名称集合 Dim sheet1_DefinedNames As DevExpress.Spreadsheet.DefinedNameCollection = sheet1.DefinedNames ' 为一系列单元格创建已定义的名称 sheet1_DefinedNames.Add("items", "Sheet1!$A$1:$C$3") ' 为公式创建定义的名称。 sheet1_DefinedNames.Add("totalSum", "=SUM(items)") ' 为常量创建一个定义的名称 sheet1_DefinedNames.Add("coefficient", "=3") '使用当前工作表中定义的名称 sheet1.Cells("D4").Formula = "=coefficient*totalSum" '在其他工作表中使用定义的名称 sheet2.Cells("D4").Formula = "=Sheet1!coefficient*Sheet1!totalSum" |
C# |
DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook(); DevExpress.Spreadsheet.Worksheet sheet1 = workbook.Worksheets["Sheet1"]; DevExpress.Spreadsheet.Worksheet sheet2 = workbook.Worksheets["Sheet2"]; // 获得Sheet1工作表的自定义名称集合 DevExpress.Spreadsheet.DefinedNameCollection sheet1_DefinedNames = sheet1.DefinedNames; // 为一系列单元格创建已定义的名称 sheet1_DefinedNames.Add("items", "Sheet1!$A$1:$C$3"); // 为公式创建定义的名称。 sheet1_DefinedNames.Add("totalSum", "=SUM(items)"); // 为常量创建一个定义的名称 sheet1_DefinedNames.Add("coefficient", "=3"); // 使用当前工作表中定义的名称 sheet1.Cells["D4"].Formula = "=coefficient*totalSum"; // 在其他工作表中使用定义的名称 sheet2.Cells["D4"].Formula = "=Sheet1!coefficient*Sheet1!totalSum"; |
此方法允许您创建一个定义的名称,其范围是整个工作簿,并将此名称与单个单元格、单元格区域、公式或常量值相关联。
Vb.Net |
Dim workbook As New DevExpress.Spreadsheet.Workbook() Dim sheet1 As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Sheet1") Dim sheet2 As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Sheet2") Dim sheet3 As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Sheet3") ' 创建一个定义的名称,以便在工作簿的任何工作表中识别。 workbook.DefinedNames.Add("cellName_Global", "=Sheet2!$G$20") ' 在不同的工作表中使用定义的名称。 sheet1.Cells("A1").Formula = "=cellName_Global" sheet2.Cells("A1").Formula = "=cellName_Global" sheet3.Cells("A1").Formula = "=cellName_Global" |
C# |
DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook(); DevExpress.Spreadsheet.Worksheet sheet1 = workbook.Worksheets["Sheet1"]; DevExpress.Spreadsheet.Worksheet sheet2 = workbook.Worksheets["Sheet2"]; DevExpress.Spreadsheet.Worksheet sheet3 = workbook.Worksheets("Sheet3"); // 创建一个定义的名称,以便在工作簿的任何工作表中识别。 workbook.DefinedNames.Add("cellName_Global", "=Sheet2!$G$20"); // 在不同的工作表中使用定义的名称。 sheet1.Cells["A1"].Formula = "=cellName_Global"; sheet2.Cells["A1"].Formula = "=cellName_Global"; sheet3.Cells["A1"].Formula = "=cellName_Global"; |
电子表格文档的所有定义名称都存储在 DefinedNameCollection 集合中。使用 Worksheet.DefinedNames 属性可访问其作用域为特定工作表的已定义名称的集合,或使用 Workbook.DefinedNames 属性可获取作用域为整个工作簿的已定义名称。可以通过 DefinedNameCollection 集合中的索引或名称 (DefinedNameCollection.GetDefinedName) 获取单个定义的名称。若要获取分配给特定单元格区域的名称,请使用 CellRange.GetDefinedName 方法。
单个定义的名称由 DefinedName 对象指定。使用此对象的属性(DefinedName.Name、DefinedName.RefersTo 和 DefinedName.Comment)根据需要修改相应的已定义名称。
注意
更改现有定义的名称后,工作簿中此名称的所有实例也将更改。例如,如果更改“定义的名称”。名称,所有使用旧名称的单元格都会显示 #NAME? 错误。
若要删除现有的已定义名称,请使用 DefinedNameCollection.Remove 或 DefinedNameCollection.RemoveAt 方法。若要从集合中删除所有已定义的名称,请使用 DefinedNameCollection.Clear 方法。
注意
删除名称后,使用该名称的所有单元格都会显示 #NAME? 错误。删除命名单元格或单元格区域后,使用引用已删除单元格或单元格区域的已定义名称的所有单元格都将显示 #REF! 错误。
另见
如何:创建单元格的命名区域
如何:创建命名公式
如何:在公式中使用名称