예제 #1
0
        private IEnumerable <double> GetValues(int value, XLTopBottomType type, bool takeTop)
        {
            using (var column = _autoFilter.Range.Column(_column))
            {
                using (var subColumn = column.Column(2, column.CellCount()))
                {
                    var cellsUsed = subColumn.CellsUsed(c => c.DataType == XLCellValues.Number);
                    if (takeTop)
                    {
                        if (type == XLTopBottomType.Items)
                        {
                            return(cellsUsed.Select(c => c.GetDouble()).OrderByDescending(d => d).Take(value).Distinct());
                        }
                        var   numerics1   = cellsUsed.Select(c => c.GetDouble());
                        Int32 valsToTake1 = numerics1.Count() * value / 100;
                        return(numerics1.OrderByDescending(d => d).Take(valsToTake1).Distinct());
                    }

                    if (type == XLTopBottomType.Items)
                    {
                        return(cellsUsed.Select(c => c.GetDouble()).OrderBy(d => d).Take(value).Distinct());
                    }

                    var   numerics   = cellsUsed.Select(c => c.GetDouble());
                    Int32 valsToTake = numerics.Count() * value / 100;
                    return(numerics.OrderBy(d => d).Take(valsToTake).Distinct());
                }
            }
        }
예제 #2
0
 public IXLStyle WhenIsBottom(Int32 value, XLTopBottomType topBottomType = XLTopBottomType.Items)
 {
     Values.Initialize(new XLFormula(value));
     Percent = topBottomType == XLTopBottomType.Percent;
     ConditionalFormatType = XLConditionalFormatType.Top10;
     Bottom = true;
     return(Style);
 }
 public IXLStyle WhenIsTop(Int32 value, XLTopBottomType topBottomType = XLTopBottomType.Items)
 {
     Values.Initialize(new XLFormula {
         Value = value.ToString()
     });
     Percent = topBottomType == XLTopBottomType.Percent;
     ConditionalFormatType = XLConditionalFormatType.Top10;
     Bottom = false;
     return(Style);
 }
예제 #4
0
        private void SetTopBottom(Int32 value, XLTopBottomType type, Boolean takeTop = true)
        {
            _autoFilter.Enabled = true;
            _autoFilter.Column(_column).SetFilterType(XLFilterType.TopBottom)
            .SetTopBottomValue(value)
            .SetTopBottomType(type);

            var values = GetValues(value, type, takeTop);

            Clear();
            _autoFilter.Filters.Add(_column, new List <XLFilter>());

            Boolean addToList = true;
            var     ws        = _autoFilter.Range.Worksheet as XLWorksheet;

            ws.SuspendEvents();
            var rows = _autoFilter.Range.Rows(2, _autoFilter.Range.RowCount());

            foreach (IXLRangeRow row in rows)
            {
                Boolean foundOne = false;
                foreach (double val in values)
                {
                    Func <Object, Boolean> condition = v => (v as IComparable).CompareTo(val) == 0;
                    if (addToList)
                    {
                        _autoFilter.Filters[_column].Add(new XLFilter
                        {
                            Value     = val,
                            Operator  = XLFilterOperator.Equal,
                            Connector = XLConnector.Or,
                            Condition = condition
                        });
                    }

                    var cell = row.Cell(_column);
                    if (cell.DataType != XLCellValues.Number || !condition(cell.GetDouble()))
                    {
                        continue;
                    }
                    row.WorksheetRow().Unhide();
                    foundOne = true;
                }
                if (!foundOne)
                {
                    row.WorksheetRow().Hide();
                }

                addToList = false;
            }
            ws.ResumeEvents();
        }
예제 #5
0
 public void Bottom(Int32 value, XLTopBottomType type = XLTopBottomType.Items)
 {
     _autoFilter.Column(_column).TopBottomPart = XLTopBottomPart.Bottom;
     SetTopBottom(value, type, false);
 }
예제 #6
0
 public IXLFilterColumn SetTopBottomType(XLTopBottomType value)
 {
     TopBottomType = value; return(this);
 }