Skip to content

Commit 1e225bd

Browse files
b0bi79Tsar Nikolay
andauthored
#170 Test inner range null reference exception. (#173)
* Test inner range null reference exception. * #169 Test inner range null reference exception Co-authored-by: Tsar Nikolay <nsmirnov@ics.perm.ru>
1 parent 62e7268 commit 1e225bd

File tree

3 files changed

+45
-2
lines changed

3 files changed

+45
-2
lines changed

ClosedXML.Report/Excel/TempSheetBuffer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@ private void Init()
4646
public IXLCell WriteValue(object value, IXLCell settingCell)
4747
{
4848
var xlCell = _sheet.Cell(_row, _clmn);
49-
xlCell.CopyFrom(settingCell);
49+
if (settingCell != null)
50+
{
51+
xlCell.CopyFrom(settingCell);
52+
}
53+
5054
try
5155
{
5256
xlCell.SetValue(value);

ClosedXML.Report/RangeTemplate.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,12 @@ private void VerticalTable(object[] items, FormulaEvaluator evaluator)
239239

240240
private void RenderCell(FormulaEvaluator evaluator, TemplateCell cell, params Parameter[] pars)
241241
{
242+
if (cell.CellType != TemplateCellType.Formula && cell.CellType != TemplateCellType.Value)
243+
{
244+
_buff.WriteValue(null, null);
245+
return;
246+
}
247+
242248
object value;
243249
try
244250
{
@@ -363,7 +369,9 @@ private void HorizontalTable(object[] items, FormulaEvaluator evaluator)
363369
var clmnStart = _buff.NextAddress;
364370
foreach (var cell in _cells)
365371
{
366-
if (cell.CellType != TemplateCellType.NewRow)
372+
if (cell.CellType == TemplateCellType.None)
373+
throw new NotSupportedException("Horizontal range does not support subranges.");
374+
else if (cell.CellType != TemplateCellType.NewRow)
367375
RenderCell(items, i, evaluator, cell);
368376
else
369377
_buff.NewRow();

tests/ClosedXML.Report.Tests/TempSheetBufferTests.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,36 @@ public void CanRenderRangeForEmptySet()
4545
ws.Cell("B4").Value.Should().Be("");
4646
}
4747
}
48+
49+
[Fact]
50+
public void InnerRange()
51+
{
52+
using (var wb = new XLWorkbook())
53+
{
54+
// Arrange.
55+
const string rangeName = "List";
56+
const string innerRangeName = "CustomTotals";
57+
const string totalsName = "Totals";
58+
var list = new List<string> { "Value1", "Value2" };
59+
var ws = wb.AddWorksheet("Sheet1");
60+
ws.Cell("B1").Value = "Header";
61+
ws.Range("A2:C3").AddToNamed(rangeName);
62+
ws.Cell("B2").Value = "{{index+1}}";
63+
ws.Cell("C2").Value = "{{item}}";
64+
ws.Cell("B3").Value = totalsName;
65+
ws.Range("C3:C3").AddToNamed(innerRangeName);
66+
67+
// Act.
68+
var template = new XLTemplate(wb);
69+
template.AddVariable(rangeName, list);
70+
template.AddVariable(innerRangeName, list.Count);
71+
template.Generate();
72+
73+
// Assert.
74+
ws.Cell("B4").Value.Should().Be(totalsName);
75+
ws.Range(rangeName).RowCount().Should().Be(3);
76+
ws.Range(rangeName).ColumnCount().Should().Be(3);
77+
}
78+
}
4879
}
4980
}

0 commit comments

Comments
 (0)