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)));*/ }