diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs index 5505211..87d58f9 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs @@ -573,6 +573,8 @@ Int32 fColumn = RangeAddress.FirstAddress.ColumnNumber; Int32 lColumn = RangeAddress.LastAddress.ColumnNumber; + var sp = Worksheet.Internals.CellsCollection.FirstPointUsed(fRow, fColumn, lRow, lColumn, includeFormats, predicate); + if (includeFormats) { var rowsUsed = @@ -587,11 +589,17 @@ Int32 ro = 0; if (rowsUsed.Any()) - ro = rowsUsed.First().Key; + if (sp.Row > 0) + ro = Math.Min(sp.Row, rowsUsed.First().Key); + else + ro = rowsUsed.First().Key; Int32 co = 0; if (columnsUsed.Any()) - co = columnsUsed.First().Key; + if (sp.Column > 0) + co = Math.Min(sp.Column, columnsUsed.First().Key); + else + co = columnsUsed.First().Key; if (ro > 0 && co > 0) return Worksheet.Cell(ro, co); @@ -624,8 +632,7 @@ } } - var sp = Worksheet.Internals.CellsCollection.FirstPointUsed(fRow, fColumn, lRow, lColumn, includeFormats, predicate); - + if (sp.Row > 0) return Worksheet.Cell(sp.Row, sp.Column); @@ -664,6 +671,8 @@ Int32 fColumn = RangeAddress.FirstAddress.ColumnNumber; Int32 lColumn = RangeAddress.LastAddress.ColumnNumber; + var sp = Worksheet.Internals.CellsCollection.LastPointUsed(fRow, fColumn, lRow, lColumn, includeFormats, predicate); + if (includeFormats) { var rowsUsed = @@ -678,11 +687,11 @@ Int32 ro = 0; if (rowsUsed.Any()) - ro = rowsUsed.Last().Key; + ro = Math.Max(sp.Row, rowsUsed.Last().Key); Int32 co = 0; if (columnsUsed.Any()) - co = columnsUsed.Last().Key; + co = Math.Max(sp.Column, columnsUsed.Last().Key); if (ro > 0 && co > 0) return Worksheet.Cell(ro, co); @@ -715,8 +724,7 @@ } } - var sp = Worksheet.Internals.CellsCollection.LastPointUsed(fRow, fColumn, lRow, lColumn, includeFormats, predicate); - + if (sp.Row > 0) return Worksheet.Cell(sp.Row, sp.Column); diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Cells/XLCellTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Cells/XLCellTests.cs index 2d10741..408d16e 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Cells/XLCellTests.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Cells/XLCellTests.cs @@ -20,6 +20,36 @@ } [Test] + public void CellsUsedIncludeStyles1() + { + IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1"); + ws.Row(3).Style.Fill.BackgroundColor = XLColor.Red; + ws.Column(3).Style.Fill.BackgroundColor = XLColor.Red; + ws.Cell(2, 2).Value = "ASDF"; + var range = ws.RangeUsed(true).RangeAddress.ToString(); + Assert.AreEqual("B2:C3", range); + } + + [Test] + public void CellsUsedIncludeStyles2() + { + IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1"); + ws.Row(2).Style.Fill.BackgroundColor = XLColor.Red; + ws.Column(2).Style.Fill.BackgroundColor = XLColor.Red; + ws.Cell(3, 3).Value = "ASDF"; + var range = ws.RangeUsed(true).RangeAddress.ToString(); + Assert.AreEqual("B2:C3", range); + } + + [Test] + public void CellsUsedIncludeStyles3() + { + IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1"); + var range = ws.RangeUsed(true); + Assert.AreEqual(null, range); + } + + [Test] public void Double_Infinity_is_a_string() { IXLWorksheet ws = new XLWorkbook().Worksheets.Add("Sheet1"); diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/TransposeRangesPlus.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/TransposeRangesPlus.xlsx index 986d564..8752286 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/TransposeRangesPlus.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/TransposeRangesPlus.xlsx Binary files differ