diff --git a/ClosedXML.Report/Options/HeightRangeTag.cs b/ClosedXML.Report/Options/HeightRangeTag.cs new file mode 100644 index 0000000..e24459b --- /dev/null +++ b/ClosedXML.Report/Options/HeightRangeTag.cs @@ -0,0 +1,18 @@ +using System.Linq; +using ClosedXML.Report.Utils; + +namespace ClosedXML.Report.Options +{ + public class HeightRangeTag : RangeOptionTag + { + public int Height => Parameters.Any() ? Parameters.First().Key.AsInt() : 0; + + public override void Execute(ProcessingContext context) + { + var firstRow = context.Range.FirstRowUsed(); + var lastRow = context.Range.LastRowUsed(); + + Range.Worksheet.Rows(firstRow.WorksheetRow().RowNumber(), lastRow.WorksheetRow().RowNumber()).Height = Height; + } + } +} diff --git a/ClosedXML.Report/Options/HeightTag.cs b/ClosedXML.Report/Options/HeightTag.cs new file mode 100644 index 0000000..e2c0728 --- /dev/null +++ b/ClosedXML.Report/Options/HeightTag.cs @@ -0,0 +1,17 @@ +using System.Linq; +using ClosedXML.Report.Utils; + +namespace ClosedXML.Report.Options; + +public class HeightTag : OptionTag +{ + public int Height => Parameters.Any() ? Parameters.First().Key.AsInt() : 0; + + public override void Execute(ProcessingContext context) + { + var xlCell = Cell.GetXlCell(context.Range); + var cellRow = xlCell.WorksheetRow().RowNumber(); + + Range.Worksheet.Row(cellRow).Height = Height; + } +} diff --git a/ClosedXML.Report/RangeTemplate.cs b/ClosedXML.Report/RangeTemplate.cs index 99e0416..fa03330 100644 --- a/ClosedXML.Report/RangeTemplate.cs +++ b/ClosedXML.Report/RangeTemplate.cs @@ -146,12 +146,14 @@ private static IEnumerable GetInnerRanges(IXLRange prng) public IReportBuffer Generate(object[] items) { _evaluator.AddVariable("items", items); + foreach (var v in _globalVariables) { _evaluator.AddVariable("@" + v.Key, v.Value); } _rangeTags.Reset(); + if (IsHorizontal) { HorizontalTable(items, _evaluator); @@ -160,6 +162,7 @@ public IReportBuffer Generate(object[] items) { VerticalTable(items, _evaluator); } + return _buff; } @@ -482,10 +485,16 @@ where TagExtensions.HasTag(value) tags = _tagsEvaluator.Parse(cell.GetString(), range, cell, out newValue); cell.Value = newValue; } - if (cell.Row > 1 && cell.Row == _rowCnt) - _rangeTags.AddRange(tags); - else - _tags.AddRange(tags); + + foreach (var optionTag in tags) + { + if (cell.Row > 1 && cell.Row == _rowCnt) + _rangeTags.Add(optionTag); + else if (optionTag is RangeOptionTag) + _rangeTags.Add(optionTag); + else + _tags.Add(optionTag); + } } _rangeOption = _rangeTags.GetAll().Union(_tags.GetAll()).FirstOrDefault(); diff --git a/ClosedXML.Report/XLTemplate.cs b/ClosedXML.Report/XLTemplate.cs index 3af8b40..04283e3 100644 --- a/ClosedXML.Report/XLTemplate.cs +++ b/ClosedXML.Report/XLTemplate.cs @@ -58,6 +58,8 @@ static XLTemplate() TagsRegister.Add("Hide", 0); TagsRegister.Add("PageOptions", 0); TagsRegister.Add("Protected", 0); + TagsRegister.Add("Height", 0); + TagsRegister.Add("HeightRange", 0); } public XLTemplate(string fileName) : this(new XLWorkbook(fileName)) diff --git a/tests/ClosedXML.Report.Tests/HeightTagTests.cs b/tests/ClosedXML.Report.Tests/HeightTagTests.cs new file mode 100644 index 0000000..3f03ff4 --- /dev/null +++ b/tests/ClosedXML.Report.Tests/HeightTagTests.cs @@ -0,0 +1,52 @@ +using System.Linq; +using ClosedXML.Report.Tests.TestModels; +using Xunit; +using Xunit.Abstractions; + +namespace ClosedXML.Report.Tests; + +[Collection("Database")] +public class HeightTagTests : XlsxTemplateTestsBase +{ + public HeightTagTests(ITestOutputHelper output) : base(output) + { + } + + [Theory, + InlineData("HeightTag.xlsx") + ] + public void Height(string templateFile) + { + XlTemplateTest(templateFile, + tpl => + { + + }, + wb => + { + CompareWithGauge(wb, templateFile); + }); + } + + [Theory, + InlineData("HeightRangeTag.xlsx") + ] + public void HeightRange(string templateFile) + { + XlTemplateTest(templateFile, + tpl => + { + using var db = new DbDemos(); + var cust = db.employees.Take(2).ToList(); + var dataTable = new + { + Table = cust + }; + tpl.AddVariable(dataTable); + }, + wb => + { + CompareWithGauge(wb, templateFile); + }); + } +} diff --git a/tests/Gauges/HeightRangeTag.xlsx b/tests/Gauges/HeightRangeTag.xlsx new file mode 100644 index 0000000..4f770e2 Binary files /dev/null and b/tests/Gauges/HeightRangeTag.xlsx differ diff --git a/tests/Gauges/HeightTag.xlsx b/tests/Gauges/HeightTag.xlsx new file mode 100644 index 0000000..f06b697 Binary files /dev/null and b/tests/Gauges/HeightTag.xlsx differ diff --git a/tests/Templates/HeightRangeTag.xlsx b/tests/Templates/HeightRangeTag.xlsx new file mode 100644 index 0000000..73274bc Binary files /dev/null and b/tests/Templates/HeightRangeTag.xlsx differ diff --git a/tests/Templates/HeightTag.xlsx b/tests/Templates/HeightTag.xlsx new file mode 100644 index 0000000..444a528 Binary files /dev/null and b/tests/Templates/HeightTag.xlsx differ