diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/NamedRanges/XLNamedRanges.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/NamedRanges/XLNamedRanges.cs
index ab2d5ed..c2c979b 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/NamedRanges/XLNamedRanges.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/NamedRanges/XLNamedRanges.cs
@@ -18,7 +18,11 @@
public IXLNamedRange NamedRange(String rangeName)
{
- return _namedRanges[rangeName];
+ IXLNamedRange range;
+ if (_namedRanges.TryGetValue(rangeName, out range))
+ return range;
+
+ return null;
}
public IXLNamedRange Add(String rangeName, String rangeAddress)
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs
index e005b74..c2cc9e7 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs
@@ -370,9 +370,33 @@
public IXLNamedRange NamedRange(String rangeName)
{
+ if (rangeName.Contains("!"))
+ {
+ var split = rangeName.Split('!');
+ var first = split[0];
+ var wsName = first.StartsWith("'") ? first.Substring(1, first.Length - 2) : first;
+ var name = split[1];
+ IXLWorksheet ws;
+ if (TryGetWorksheet(wsName, out ws))
+ return ws.NamedRange(name);
+
+ return null;
+ }
return NamedRanges.NamedRange(rangeName);
}
+ public Boolean TryGetWorksheet(String name, out IXLWorksheet worksheet)
+ {
+ if (Worksheets.Any(w => w.Name.ToLower().Equals(name.ToLower())))
+ {
+ worksheet = Worksheet(name);
+ return true;
+ }
+
+ worksheet = null;
+ return false;
+ }
+
///
/// Saves the current workbook.
///
@@ -607,7 +631,11 @@
public IXLCell Cell(String namedCell)
{
- return NamedRange(namedCell).Ranges.First().FirstCell();
+ var namedRange = NamedRange(namedCell);
+ if (namedRange == null) return null;
+ var range = namedRange.Ranges.FirstOrDefault();
+ if (range == null) return null;
+ return range.FirstCell();
}
public IXLCells Cells(String namedCells)
@@ -617,15 +645,19 @@
public IXLRange Range(String namedRange)
{
- return NamedRange(namedRange).Ranges.First();
+ var range = NamedRange(namedRange);
+ if (range == null) return null;
+ return range.Ranges.FirstOrDefault();
}
public IXLRanges Ranges(String namedRanges)
{
var retVal = new XLRanges();
var rangePairs = namedRanges.Split(',');
- foreach (var r in rangePairs.Select(s=>Range(s.Trim())))
- retVal.Add(r);
+ foreach (var range in rangePairs.Select(r => Range(r.Trim())).Where(range => range != null))
+ {
+ retVal.Add(range);
+ }
return retVal;
}
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs
index c7137d9..65679bc 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs
@@ -1374,11 +1374,13 @@
if (NamedRanges.Any(n => String.Compare(n.Name, cellAddressInRange, true) == 0))
return (XLCell)NamedRange(cellAddressInRange).Ranges.First().FirstCell();
- return (XLCell)Workbook.NamedRanges.First(n =>
+ var namedRanges = Workbook.NamedRanges.FirstOrDefault(n =>
String.Compare(n.Name, cellAddressInRange, true) == 0
&& n.Ranges.First().Worksheet == this
- && n.Ranges.Count == 1)
- .Ranges.First().FirstCell();
+ && n.Ranges.Count == 1);
+ if (namedRanges == null || !namedRanges.Ranges.Any()) return null;
+
+ return (XLCell)namedRanges.Ranges.First().FirstCell();
}
public XLCell CellFast(String cellAddressInRange)
@@ -1397,11 +1399,12 @@
if (NamedRanges.Any(n => String.Compare(n.Name, rangeAddressStr, true) == 0))
return (XLRange)NamedRange(rangeAddressStr).Ranges.First();
- return (XLRange)Workbook.NamedRanges.First(n =>
+ var namedRanges = Workbook.NamedRanges.FirstOrDefault(n =>
String.Compare(n.Name, rangeAddressStr, true) == 0
&& n.Ranges.First().Worksheet == this
- && n.Ranges.Count == 1)
- .Ranges.First();
+ && n.Ranges.Count == 1);
+ if (namedRanges == null || !namedRanges.Ranges.Any()) return null;
+ return (XLRange)namedRanges.Ranges.First();
}
public IXLRanges MergedRanges { get { return Internals.MergedRanges; } }
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/XLWorkbookTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/XLWorkbookTests.cs
index bbb375d..abbe514 100644
--- a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/XLWorkbookTests.cs
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/XLWorkbookTests.cs
@@ -88,5 +88,116 @@
Assert.AreEqual("$A$1:$A$1", wsRanges.First().RangeAddress.ToStringFixed());
Assert.AreEqual("$A$3:$A$3", wsRanges.Last().RangeAddress.ToStringFixed());
}
+
+ [TestMethod]
+ public void Cell1()
+ {
+ var wb = new XLWorkbook();
+ var cell = wb.Cell("ABC");
+ Assert.IsNull(cell);
+ }
+
+ [TestMethod]
+ public void Cell2()
+ {
+ var wb = new XLWorkbook();
+ var ws = wb.AddWorksheet("Sheet1");
+ ws.FirstCell().SetValue(1).AddToNamed("Result", XLScope.Worksheet);
+ var cell = wb.Cell("Sheet1!Result");
+ Assert.IsNotNull(cell);
+ Assert.AreEqual(1, cell.GetValue());
+ }
+
+ [TestMethod]
+ public void NamedRange1()
+ {
+ var wb = new XLWorkbook();
+ var range = wb.NamedRange("ABC");
+ Assert.IsNull(range);
+ }
+
+ [TestMethod]
+ public void NamedRange2()
+ {
+ var wb = new XLWorkbook();
+ var ws = wb.AddWorksheet("Sheet1");
+ ws.FirstCell().SetValue(1).AddToNamed("Result", XLScope.Worksheet);
+ var range = wb.NamedRange("Sheet1!Result");
+ Assert.IsNotNull(range);
+ Assert.AreEqual(1, range.Ranges.Count);
+ Assert.AreEqual(1, range.Ranges.Cells().Count());
+ Assert.AreEqual(1, range.Ranges.First().FirstCell().GetValue());
+ }
+
+ [TestMethod]
+ public void NamedRange3()
+ {
+ var wb = new XLWorkbook();
+ var ws = wb.AddWorksheet("Sheet1");
+ var range = wb.NamedRange("Sheet1!Result");
+ Assert.IsNull(range);
+ }
+
+ [TestMethod]
+ public void Range1()
+ {
+ var wb = new XLWorkbook();
+ var range = wb.Range("ABC");
+ Assert.IsNull(range);
+ }
+
+ [TestMethod]
+ public void Range2()
+ {
+ var wb = new XLWorkbook();
+ var ws = wb.AddWorksheet("Sheet1");
+ ws.FirstCell().SetValue(1).AddToNamed("Result", XLScope.Worksheet);
+ var range = wb.Range("Sheet1!Result");
+ Assert.IsNotNull(range);
+ Assert.AreEqual(1, range.Cells().Count());
+ Assert.AreEqual(1, range.FirstCell().GetValue());
+ }
+
+ [TestMethod]
+ public void Ranges1()
+ {
+ var wb = new XLWorkbook();
+ var ranges = wb.Ranges("ABC");
+ Assert.IsNotNull(ranges);
+ Assert.AreEqual(0, ranges.Count());
+ }
+
+ [TestMethod]
+ public void Ranges2()
+ {
+ var wb = new XLWorkbook();
+ var ws = wb.AddWorksheet("Sheet1");
+ ws.FirstCell().SetValue(1).AddToNamed("Result", XLScope.Worksheet);
+ var ranges = wb.Ranges("Sheet1!Result, ABC");
+ Assert.IsNotNull(ranges);
+ Assert.AreEqual(1, ranges.Cells().Count());
+ Assert.AreEqual(1, ranges.First().FirstCell().GetValue());
+ }
+
+ [TestMethod]
+ public void Cells1()
+ {
+ var wb = new XLWorkbook();
+ var cells = wb.Cells("ABC");
+ Assert.IsNotNull(cells);
+ Assert.AreEqual(0, cells.Count());
+ }
+
+ [TestMethod]
+ public void Cells2()
+ {
+ var wb = new XLWorkbook();
+ var ws = wb.AddWorksheet("Sheet1");
+ ws.FirstCell().SetValue(1).AddToNamed("Result", XLScope.Worksheet);
+ var cells = wb.Cells("Sheet1!Result, ABC");
+ Assert.IsNotNull(cells);
+ Assert.AreEqual(1, cells.Count());
+ Assert.AreEqual(1, cells.First().GetValue());
+ }
}
}