diff --git a/ClosedXML/Excel/NamedRanges/IXLNamedRange.cs b/ClosedXML/Excel/NamedRanges/IXLNamedRange.cs
index 9695475..c1d3831 100644
--- a/ClosedXML/Excel/NamedRanges/IXLNamedRange.cs
+++ b/ClosedXML/Excel/NamedRanges/IXLNamedRange.cs
@@ -27,6 +27,14 @@
String Comment { get; set; }
///
+ /// Gets or sets the visibility of this named range.
+ ///
+ ///
+ /// true if visible; otherwise, false.
+ ///
+ Boolean Visible { get; set; }
+
+ ///
/// Adds the specified range to this named range.
/// Note: A named range can point to multiple ranges.
///
diff --git a/ClosedXML/Excel/NamedRanges/XLNamedRange.cs b/ClosedXML/Excel/NamedRanges/XLNamedRange.cs
index a2958fb..1cef341 100644
--- a/ClosedXML/Excel/NamedRanges/XLNamedRange.cs
+++ b/ClosedXML/Excel/NamedRanges/XLNamedRange.cs
@@ -13,6 +13,7 @@
private readonly XLNamedRanges _namedRanges;
public XLNamedRange(XLNamedRanges namedRanges , String rangeName, String range, String comment = null)
{
+ Visible = true;
Name = rangeName;
_rangeList.Add(range);
Comment = comment;
@@ -21,6 +22,7 @@
public XLNamedRange(XLNamedRanges namedRanges, String rangeName, IXLRanges ranges, String comment = null)
{
+ Visible = true;
Name = rangeName;
ranges.ForEach(r => _rangeList.Add(r.RangeAddress.ToStringFixed(XLReferenceStyle.A1, true)));
Comment = comment;
@@ -33,7 +35,7 @@
get
{
var ranges = new XLRanges();
- foreach (var rangeToAdd in
+ foreach (var rangeToAdd in
from rangeAddress in _rangeList.SelectMany(c=>c.Split(',')).Where(s=>s[0] != '"')
let match = XLHelper.NamedRangeReferenceRegex.Match(rangeAddress)
select
@@ -49,6 +51,8 @@
public String Comment { get; set; }
+ public Boolean Visible { get; set; }
+
public IXLRanges Add(XLWorkbook workbook, String rangeAddress)
{
var ranges = new XLRanges();
diff --git a/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/Excel/XLWorkbook_Load.cs
index 21c7cf9..c60af0e 100644
--- a/ClosedXML/Excel/XLWorkbook_Load.cs
+++ b/ClosedXML/Excel/XLWorkbook_Load.cs
@@ -721,6 +721,8 @@
foreach (DefinedName definedName in workbook.DefinedNames)
{
var name = definedName.Name;
+ var visible = true;
+ if (definedName.Hidden != null) visible = !BooleanValue.ToBoolean(definedName.Hidden);
if (name == "_xlnm.Print_Area")
{
foreach (string area in definedName.Text.Split(','))
@@ -758,12 +760,12 @@
if (localSheetId == null)
{
if (!NamedRanges.Any(nr => nr.Name == name))
- NamedRanges.Add(name, text, comment);
+ NamedRanges.Add(name, text, comment).Visible = visible;
}
else
{
if (!Worksheet(Int32.Parse(localSheetId) + 1).NamedRanges.Any(nr => nr.Name == name))
- Worksheet(Int32.Parse(localSheetId) + 1).NamedRanges.Add(name, text, comment);
+ Worksheet(Int32.Parse(localSheetId) + 1).NamedRanges.Add(name, text, comment).Visible = visible;
}
}
}
diff --git a/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/Excel/XLWorkbook_Save.cs
index 0e08ae1..5d9ac20 100644
--- a/ClosedXML/Excel/XLWorkbook_Save.cs
+++ b/ClosedXML/Excel/XLWorkbook_Save.cs
@@ -729,6 +729,10 @@
LocalSheetId = sheetId,
Text = nr.ToString()
};
+
+ if (!nr.Visible)
+ definedName.Hidden = BooleanValue.FromBoolean(true);
+
if (!XLHelper.IsNullOrWhiteSpace(nr.Comment))
definedName.Comment = nr.Comment;
definedNames.AppendChild(definedName);
@@ -780,6 +784,10 @@
Name = nr.Name,
Text = nr.ToString()
};
+
+ if (!nr.Visible)
+ definedName.Hidden = BooleanValue.FromBoolean(true);
+
if (!XLHelper.IsNullOrWhiteSpace(nr.Comment))
definedName.Comment = nr.Comment;
definedNames.AppendChild(definedName);
diff --git a/ClosedXML_Examples/Ranges/NamedRanges.cs b/ClosedXML_Examples/Ranges/NamedRanges.cs
index 8b035df..325a98f 100644
--- a/ClosedXML_Examples/Ranges/NamedRanges.cs
+++ b/ClosedXML_Examples/Ranges/NamedRanges.cs
@@ -1,6 +1,5 @@
-using System;
-using ClosedXML.Excel;
-
+using ClosedXML.Excel;
+using System;
namespace ClosedXML_Examples.Misc
{
@@ -28,6 +27,12 @@
// Create a named range with the data:
wsData.Range("A2:B4").AddToNamed("PeopleData"); // Default named range scope is Workbook
+ // Create a hidden named range
+ wb.NamedRanges.Add("Headers", wsData.Range("A1:B1")).Visible = false;
+
+ // Create a hidden named range n worksheet scope
+ wsData.NamedRanges.Add("HeadersAndData", wsData.Range("A1:B4")).Visible = false;
+
// Let's use the named range in a formula:
wsPresentation.Cell(1, 1).Value = "People Count:";
wsPresentation.Cell(1, 2).FormulaA1 = "COUNT(PeopleData)";
@@ -42,7 +47,6 @@
// Copy the data in a named range:
wsPresentation.Cell(4, 1).Value = "People Data:";
wsPresentation.Cell(5, 1).Value = wb.Range("PeopleData");
-
/////////////////////////////////////////////////////////////////////////
// For the Excel geeks out there who actually know about
@@ -76,7 +80,6 @@
// Override
-
- #endregion
+ #endregion Methods
}
}
diff --git a/ClosedXML_Tests/Resource/Examples/Ranges/NamedRanges.xlsx b/ClosedXML_Tests/Resource/Examples/Ranges/NamedRanges.xlsx
index 7087248..27bb627 100644
--- a/ClosedXML_Tests/Resource/Examples/Ranges/NamedRanges.xlsx
+++ b/ClosedXML_Tests/Resource/Examples/Ranges/NamedRanges.xlsx
Binary files differ