private void HorizontalTable(object[] items, FormulaEvaluator evaluator)
        {
            var rangeStart = _buff.NextAddress;
            var tags       = _tags.CopyTo(_rowRange);

            for (int i = 0; i < items.Length; i++)
            {
                var startAddr = _buff.NextAddress;
                foreach (var cell in _cells)
                {
                    if (cell.CellType == TemplateCellType.None)
                    {
                        throw new NotSupportedException("Horizontal range does not support subranges.");
                    }
                    else if (cell.CellType != TemplateCellType.NewRow)
                    {
                        RenderCell(items, i, evaluator, cell);
                    }
                    else
                    {
                        _buff.NewRow(startAddr);
                    }
                }

                var newClmnRng = _buff.GetRange(startAddr, _buff.PrevAddress);
                foreach (var mrg in _mergedRanges.Where(r => _optionsRow == null || !_optionsRow.Contains(r)))
                {
                    var newMrg = mrg.Relative(_rowRange, newClmnRng);
                    newMrg.Merge(false);
                }

                tags.Execute(new ProcessingContext(newClmnRng, items[i], evaluator));
                tags.Reset();

                if (_rowCnt > 1)
                {
                    _buff.NewColumn(startAddr);
                }
            }

            var worksheet  = _rowRange.Worksheet;
            var colNumbers = _cells.Where(xc => xc.XLCell != null)
                             .Select(xc => xc.XLCell.Address.ColumnNumber)
                             .Distinct()
                             .ToArray();
            var widths = colNumbers
                         .Select(c => worksheet.Column(c).Width)
                         .ToArray();
            var firstCol = colNumbers.Min();

            foreach (var col in Enumerable.Range(rangeStart.ColumnNumber, _buff.PrevAddress.ColumnNumber))
            {
                worksheet.Column(firstCol + col - 1).Width = widths[(col - 1) % widths.Length];
            }

            /*using (var resultRange = _buff.GetRange(rangeStart, _buff.PrevAddress))
             *  _rangeTags.Execute(new ProcessingContext(resultRange, new DataSource(items)));*/
        }
        private void HorizontalTable(object[] items, FormulaEvaluator evaluator)
        {
            var rangeStart = _buff.NextAddress;
            var tags       = _tags.CopyTo(_rowRange);

            for (int i = 0; i < items.Length; i++)
            {
                var clmnStart = _buff.NextAddress;
                foreach (var cell in _cells)
                {
                    if (cell.CellType != TemplateCellType.NewRow)
                    {
                        RenderCell(items, i, evaluator, cell);
                    }
                    else
                    {
                        _buff.NewRow();
                    }
                }

                var newClmnRng = _buff.GetRange(clmnStart, _buff.PrevAddress);
                foreach (var mrg in _mergedRanges.Where(r => _optionsRow == null || !_optionsRow.Contains(r)))
                {
                    var newMrg = mrg.Relative(_rowRange, newClmnRng);
                    newMrg.Merge(false);
                }

                if (_rowCnt > 1)
                {
                    _buff.AddConditionalFormats(_condFormats, _rowRange, newClmnRng);
                }
                tags.Execute(new ProcessingContext(newClmnRng, items[i]));

                if (_rowCnt > 1)
                {
                    _buff.NewColumn();
                }
            }

            var resultRange = _buff.GetRange(rangeStart, _buff.PrevAddress);

            var worksheet  = _rowRange.Worksheet;
            var colNumbers = _cells.Where(xc => xc.XLCell != null)
                             .Select(xc => xc.XLCell.Address.ColumnNumber)
                             .Distinct()
                             .ToArray();
            var widths = colNumbers
                         .Select(c => worksheet.Column(c).Width)
                         .ToArray();
            var firstCol = colNumbers.Min();

            foreach (var col in Enumerable.Range(rangeStart.ColumnNumber, _buff.PrevAddress.ColumnNumber))
            {
                worksheet.Column(firstCol + col - 1).Width = widths[(col - 1) % widths.Length];
            }
            if (_rowCnt == 1)
            {
                var rows = resultRange.RowCount() - (_optionsRowIsEmpty ? 0 : 1);
                _buff.AddConditionalFormats(_condFormats, _rowRange, resultRange.Offset(0, 0, rows, resultRange.ColumnCount()));
            }

            /*using (var resultRange = _buff.GetRange(rangeStart, _buff.PrevAddress))
             *  _rangeTags.Execute(new ProcessingContext(resultRange, new DataSource(items)));*/
        }