Ejemplo n.º 1
0
        public ITableRowBuilder <TSource> Apply()
        {
            int indexColumn = 0;
            var data        = _dataFunc().ToList();

            foreach (var item in data)
            {
                foreach (var row in _columnSources.GroupBy(x => x.Row).ToList())
                {
                    indexColumn = _tablePositionFinder.GetColumnForNewRow();
                    foreach (var column in row)
                    {
                        var columnOptionsBuilder = new ColumnOptionsBuilder <TSource>();
                        column.ActionOptions?.Invoke(columnOptionsBuilder);
                        ColumnOptions options = columnOptionsBuilder;

                        // set color if present function
                        options.TextColor       = columnOptionsBuilder.TextColorFunc?.Invoke(item) ?? options.TextColor;
                        options.BackgroundColor = columnOptionsBuilder.BackgroundColorFunc?.Invoke(item) ?? options.BackgroundColor;

                        var pos = _tablePositionFinder.GetNewPosition(indexColumn, options.Colspan, options.Rowspan);

                        setExcelRange(column.SelectorFunc?.Invoke(item) ?? "", pos, options);
                        indexColumn = indexColumn + options.Colspan;
                    }
                }
            }

            return(this);
        }
Ejemplo n.º 2
0
        public ITableColumnBuilder Column <T>(T value, Action <ColumnOptionsBuilder> action)
        {
            var columnOptionsBuilder = new ColumnOptionsBuilder();

            action?.Invoke(columnOptionsBuilder);
            ColumnOptions options = columnOptionsBuilder;

            var pos = _rowBuilder.GetPositionForCurrentColumn(options.Colspan, options.Rowspan);

            setExcelRange(value, pos, options);
            _rowBuilder.NextColumn(options.Colspan); // next column in the current row
            return(this);
        }
Ejemplo n.º 3
0
        public ITableColumnBuilder ColumnRange <T>(IEnumerable <T> values, Action <ColumnOptionsBuilder> action = null)
        {
            var columnOptionsBuilder = new ColumnOptionsBuilder();

            action?.Invoke(columnOptionsBuilder);
            ColumnOptions options = columnOptionsBuilder;

            foreach (var val in values)
            {
                var pos = _rowBuilder.GetPositionForCurrentColumn(options.Colspan, options.Rowspan);

                setExcelRange(val, pos, options);
                _rowBuilder.NextColumn(options.Colspan); // next column in the current row
            }

            return(this);
        }
Ejemplo n.º 4
0
        public IWorksheetFactory Text(string text, Position pos, Action <ColumnOptionsBuilder> action = null,
                                      double?rowHeight = null)
        {
            var columnOptionsBuilder = new ColumnOptionsBuilder();

            action?.Invoke(columnOptionsBuilder);
            ColumnOptions options = columnOptionsBuilder;

            ;

            using (var range = ws.Cells[pos.Row, pos.Col, pos.Row + options.Rowspan - 1, pos.Col + options.Colspan - 1])
            {
                range.Merge = options.Colspan > 1 || options.Rowspan > 1;
                range.Value = text;

                if (options.Width.HasValue)
                {
                    ws.Column(pos.Col).Width = options.Width.Value;
                }

                if (rowHeight.HasValue)
                {
                    ws.Row(pos.Row).Height = rowHeight.Value;
                }

                range.Style.WrapText            = true;
                range.Style.HorizontalAlignment = options.HorizontalAlignment.ToEPPlusHorizontalAligment();
                range.Style.VerticalAlignment   = options.VerticalAlignment.ToEpPlusVerticalAlignment();

                range.Style.Font.Bold = options.FontBold;
                range.Style.Font.Size = options.FontSize ?? 11;
                // border
                //range.Style.Border.BorderAround(OfficeOpenXml.Style.ExcelBorderStyle.Thin);

                if (options.VerticalText)
                {
                    range.Style.TextRotation = 90;
                }

                range.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
                range.Style.Font.Color.SetColor(options.TextColor);
                range.Style.Fill.BackgroundColor.SetColor(options.BackgroundColor);
            }

            return(this);
        }