Skip to content

Commit de89a78

Browse files
authored
#161 Name Manager chose sheet scope not workbook scope then Enumerable extend will not work (#222)
1 parent 4f9798d commit de89a78

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

ClosedXML.Report/Excel/XlExtensions.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ public static class XlExtensions
4040
/// <param name="range">range</param>
4141
public static IEnumerable<IXLNamedRange> GetContainerNames(this IXLRange range)
4242
{
43-
return range.Worksheet.Workbook.NamedRanges.Where(x => x.Ranges.Where(r => !r.Equals(range)).Any(r => r.Contains(range)));
43+
return range.Worksheet.Workbook.NamedRanges.Where(x => GetContainingRanges(x, range))
44+
.Union(range.Worksheet.NamedRanges.Where(x => GetContainingRanges(x, range)));
4445
}
4546

4647
public static bool Contains(this IXLRangeAddress rangeAddress, IXLAddress address)
@@ -121,8 +122,13 @@ internal static KeyValuePair<string, IXLRangeAddress>[] GetRangeParameters(this
121122
/// <param name="range">range</param>
122123
public static IEnumerable<IXLNamedRange> GetContainingNames(this IXLRange range)
123124
{
124-
return range.Worksheet.Workbook.NamedRanges.Where(x => x.Ranges.Where(r => r.Worksheet.Position == range.Worksheet.Position
125-
&& !r.Equals(range)).Any(range.Contains));
125+
return range.Worksheet.NamedRanges.Where(x => GetContainingRanges(x, range))
126+
.Union(range.Worksheet.Workbook.NamedRanges.Where(x => GetContainingRanges(x, range)));
127+
}
128+
129+
private static bool GetContainingRanges(IXLNamedRange x, IXLRange xlRange)
130+
{
131+
return x.Ranges.Where(r => r.Worksheet.Position == xlRange.Worksheet.Position && !r.Equals(xlRange)).Any(xlRange.Contains);
126132
}
127133

128134
/// <summary>

ClosedXML.Report/RangeTemplate.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@ internal RangeTemplate(string name, IXLRange range, TempSheetBuffer buff, Templa
4848
Name = name;
4949
Source = name;
5050
var rangeName = name + "_tpl";
51-
if (wb.NamedRanges.TryGetValue(rangeName, out var namedRange))
51+
if (range.Worksheet.NamedRanges.TryGetValue(rangeName, out var namedRange) || wb.NamedRanges.TryGetValue(rangeName, out namedRange))
5252
{
5353
namedRange.Add(range);
5454
}
5555
else
5656
{
57-
wb.NamedRanges.Add(rangeName, range);
57+
range.Worksheet.NamedRanges.Add(rangeName, range);
5858
}
5959

6060
_evaluator = new FormulaEvaluator();

0 commit comments

Comments
 (0)