Filter Data

This module uses the DevExpress Spreadsheet API to filter data in a predefined Excel document.

Select the filter type from the drop-down menu. Available filter methods include filtering by cell values, date ranges, numeric ranges, text content, top values, dynamic values, and colors. Configure the filter parameters based on the selected filter type, such as selecting specific values or setting date/numeric ranges.

Select the output format from the drop-down menu and click Filter Data and Save as to apply the filter and download the result.

Sample Document
FilterSample.xlsx
Press backspace or delete to remove the tag
Mozzarella di Giovanni
Gorgonzola Telino



using DevExpress.Spreadsheet;
using System.Drawing;

Stream FilterByMultipleValues(Stream inputStream, IEnumerable<string> selectedProductFilterValues, DocumentFormat outputFormat) {
    using Workbook workbook = new Workbook();
    workbook.LoadDocument(inputStream);

    // Activate the "Regional sales" worksheet
    Worksheet regionalSalesWorksheet = workbook.Worksheets["Regional sales"];
    //workbook.Worksheets.ActiveWorksheet = regionalSalesWorksheet;

    CellValue[] cellValues;

    if(selectedProductFilterValues == null || !selectedProductFilterValues.Any()) {
        cellValues = ["Mozzarella di Giovanni", "Gorgonzola Telino"];
    } else {
        cellValues = new CellValue[selectedProductFilterValues.Count()];
        int index = 0;
        foreach(var cellValue in selectedProductFilterValues) {
            cellValues[index++] = cellValue;
        }
    }

    // Enable filtering
    EnableFilter(regionalSalesWorksheet);

    // Filter data in the "Product" column by an array of values
    AutoFilterColumn productsAutoFilterColumn = regionalSalesWorksheet.AutoFilter.Columns[GetColumnIndexByName("Product")];
    productsAutoFilterColumn.ApplyFilterCriteria(cellValues);

    // Create output stream and save document in target format
    return CreateOutputStream(workbook, outputFormat);
}

Stream FilterMixedDataTypesByValues(Stream inputStream, DateTime filterDate, DocumentFormat outputFormat) {
    using Workbook workbook = new Workbook();
    workbook.LoadDocument(inputStream);

    // Activate the "Regional sales" worksheet
    Worksheet regionalSalesWorksheet = workbook.Worksheets["Regional sales"];
    workbook.Worksheets.ActiveWorksheet = regionalSalesWorksheet;

    // Enable filtering
    EnableFilter(regionalSalesWorksheet);

    // Create date grouping item to filter the specified date
    IList<DateGrouping> groupings = new List<DateGrouping>();
    DateGrouping dateGrouping = new DateGrouping(filterDate, DateTimeGroupingType.Month);
    groupings.Add(dateGrouping);

    // Filter data in the "Reported Date" column to display values reported in January 2015 and specified date
    AutoFilterColumn reportedDateAutoFilterColumn = regionalSalesWorksheet.AutoFilter.Columns[GetColumnIndexByName("Reported Date")];
    reportedDateAutoFilterColumn.ApplyFilterCriteria("gennaio 2015", groupings);

    // Create output stream and save document in target format
    return CreateOutputStream(workbook, outputFormat);
}

Stream FilterDatesByCondition(Stream inputStream, DateTime reportedDateStartDate, DateTime reportedDateEndDate, DocumentFormat outputFormat) {
    using Workbook workbook = new Workbook();
    workbook.LoadDocument(inputStream);

    // Activate the "Regional sales" worksheet
    Worksheet regionalSalesWorksheet = workbook.Worksheets["Regional sales"];
    workbook.Worksheets.ActiveWorksheet = regionalSalesWorksheet;

    // Enable filtering
    EnableFilter(regionalSalesWorksheet);

    // Filter values in the "Reported Date" column to display dates that are between the specified start and end dates
    AutoFilterColumn reportedDateAutoFilterColumn = regionalSalesWorksheet.AutoFilter.Columns[GetColumnIndexByName("Reported Date")];
    reportedDateAutoFilterColumn.ApplyCustomFilter
        (reportedDateStartDate, FilterComparisonOperator.GreaterThanOrEqual,
        reportedDateEndDate, FilterComparisonOperator.LessThanOrEqual, true);

    // Create output stream and save document in target format
    return CreateOutputStream(workbook, outputFormat);
}

Stream FilterNumericByCondition(Stream inputStream, int minValue, int maxValue, DocumentFormat outputFormat) {
    using Workbook workbook = new Workbook();
    workbook.LoadDocument(inputStream);

    // Activate the "Regional sales" worksheet
    Worksheet regionalSalesWorksheet = workbook.Worksheets["Regional sales"];
    workbook.Worksheets.ActiveWorksheet = regionalSalesWorksheet;

    // Enable filtering
    EnableFilter(regionalSalesWorksheet);

    // Filter values in the "Sales" column that are in the specified range
    AutoFilterColumn salesAutoFilterColumn = regionalSalesWorksheet.AutoFilter.Columns[GetColumnIndexByName("Sales")];
    salesAutoFilterColumn.ApplyCustomFilter(minValue, FilterComparisonOperator.GreaterThanOrEqual, maxValue, FilterComparisonOperator.LessThanOrEqual, true);

    // Create output stream and save document in target format
    return CreateOutputStream(workbook, outputFormat);
}

Stream FilterTextByCondition(Stream inputStream, DocumentFormat outputFormat) {
    using Workbook workbook = new Workbook();
    workbook.LoadDocument(inputStream);

    // Activate the "Regional sales" worksheet
    Worksheet regionalSalesWorksheet = workbook.Worksheets["Regional sales"];
    workbook.Worksheets.ActiveWorksheet = regionalSalesWorksheet;

    // Enable filtering
    EnableFilter(regionalSalesWorksheet);

    // Filter values in the "Product" column that contain "Gi" and include empty cells
    AutoFilterColumn productsAutoFilterColumn = regionalSalesWorksheet.AutoFilter.Columns[GetColumnIndexByName("Product")];
    productsAutoFilterColumn.ApplyCustomFilter("*Gi*", FilterComparisonOperator.Equal, FilterValue.FilterByBlank, FilterComparisonOperator.Equal, false);

    // Create output stream and save document in target format
    return CreateOutputStream(workbook, outputFormat);
}

Stream Top10FilterValue(Stream inputStream, DocumentFormat outputFormat) {
    using Workbook workbook = new Workbook();
    workbook.LoadDocument(inputStream);

    // Activate the "Regional sales" worksheet
    Worksheet regionalSalesWorksheet = workbook.Worksheets["Regional sales"];
    workbook.Worksheets.ActiveWorksheet = regionalSalesWorksheet;

    // Enable filtering
    EnableFilter(regionalSalesWorksheet);

    // Apply a filter to the "Sales" column to display the top ten values.
    AutoFilterColumn salesAutoFilterColumn = regionalSalesWorksheet.AutoFilter.Columns[GetColumnIndexByName("Sales")];
    salesAutoFilterColumn.ApplyTop10Filter(Top10Type.Top10Items, 10);

    // Create output stream and save document in target format
    return CreateOutputStream(workbook, outputFormat);
}

Stream DynamicFilterValue(Stream inputStream, DocumentFormat outputFormat) {
    using Workbook workbook = new Workbook();
    workbook.LoadDocument(inputStream);

    // Activate the "Regional sales" worksheet
    Worksheet regionalSalesWorksheet = workbook.Worksheets["Regional sales"];
    workbook.Worksheets.ActiveWorksheet = regionalSalesWorksheet;

    // Enable filtering
    EnableFilter(regionalSalesWorksheet);

    // Apply a dynamic filter to the "Sales" column to display only values that are above the average
    AutoFilterColumn salesAutoFilterColumn = regionalSalesWorksheet.AutoFilter.Columns[GetColumnIndexByName("Sales")];
    salesAutoFilterColumn.ApplyDynamicFilter(DynamicFilterType.AboveAverage);

    // Create output stream and save document in target format
    return CreateOutputStream(workbook, outputFormat);
}

Stream FilterByFontColor(Stream inputStream, DocumentFormat outputFormat) {
    using Workbook workbook = new Workbook();
    workbook.LoadDocument(inputStream);

    // Activate the "Regional sales" worksheet
    Worksheet regionalSalesWorksheet = workbook.Worksheets["Regional sales"];
    workbook.Worksheets.ActiveWorksheet = regionalSalesWorksheet;

    // Enable filtering
    EnableFilter(regionalSalesWorksheet);

    // Filter values in the "Sales" column by font color
    AutoFilterColumn salesAutoFilterColumn = regionalSalesWorksheet.AutoFilter.Columns[GetColumnIndexByName("Sales")];
    salesAutoFilterColumn.ApplyFontColorFilter(regionalSalesWorksheet["D10"].Font.Color);

    // Create output stream and save document in target format
    return CreateOutputStream(workbook, outputFormat);
}

Stream FilterByFillColor(Stream inputStream, DocumentFormat outputFormat) {
    using Workbook workbook = new Workbook();
    workbook.LoadDocument(inputStream);

    // Activate the "Regional sales" worksheet
    Worksheet regionalSalesWorksheet = workbook.Worksheets["Regional sales"];
    workbook.Worksheets.ActiveWorksheet = regionalSalesWorksheet;

    // Enable filtering
    EnableFilter(regionalSalesWorksheet);

    // Filter values in the "Products" column by fill color
    AutoFilterColumn productsAutoFilterColumn = regionalSalesWorksheet.AutoFilter.Columns[GetColumnIndexByName("Product")];
    productsAutoFilterColumn.ApplyFillFilter(regionalSalesWorksheet["C10"].Fill);

    // Create output stream and save document in target format
    return CreateOutputStream(workbook, outputFormat);
}

Stream FilterByBackgroundColor(Stream inputStream, DocumentFormat outputFormat) {
    using Workbook workbook = new Workbook();
    workbook.LoadDocument(inputStream);

    // Activate the "Regional sales" worksheet
    Worksheet regionalSalesWorksheet = workbook.Worksheets["Regional sales"];
    workbook.Worksheets.ActiveWorksheet = regionalSalesWorksheet;

    // Enable filtering
    EnableFilter(regionalSalesWorksheet);

    // Filter values in the "Products" column by background color
    AutoFilterColumn productsAutoFilterColumn = regionalSalesWorksheet.AutoFilter.Columns[GetColumnIndexByName("Product")];
    productsAutoFilterColumn.ApplyFillColorFilter(regionalSalesWorksheet["C12"].FillColor);

    // Create output stream and save document in target format
    return CreateOutputStream(workbook, outputFormat);
}

Stream FilterAndSortByMultipleColumns(Stream inputStream, bool descending, DocumentFormat outputFormat) {
    using Workbook workbook = new Workbook();
    workbook.LoadDocument(inputStream);

    // Activate the "Regional sales" worksheet
    Worksheet regionalSalesWorksheet = workbook.Worksheets["Regional sales"];
    workbook.Worksheets.ActiveWorksheet = regionalSalesWorksheet;

    // Enable filtering
    EnableFilter(regionalSalesWorksheet);

    // Sort data in the "B2:E23" range by columns "Region" and "Sales"
    List<SortCondition> sortConditions = new List<SortCondition>();
    Color color = regionalSalesWorksheet["D12"].Font.Color;

    sortConditions.Add(new SortCondition(GetColumnIndexByName("Region"), descending));
    sortConditions.Add(new SortCondition(GetColumnIndexByName("Sales"), color, descending));
    regionalSalesWorksheet.AutoFilter.SortState.Sort(sortConditions);

    // Create output stream and save document in target format
    return CreateOutputStream(workbook, outputFormat);
}

int GetColumnIndexByName(string columnName) {
    return columnName.ToLowerInvariant()
        switch {
            "region" => 0,
            "product" => 1,
            "sales" => 2,
            "reported date" => 3,
            _ => 0
        };
}

void EnableFilter(Worksheet worksheet) {
    // Enable filtering for the "B2:E23" cell range
    CellRange range = worksheet["B2:E23"];
    worksheet.AutoFilter.Apply(range);
}

Stream CreateOutputStream(Workbook workbook, DocumentFormat outputFormat) {
    var outputStream = new MemoryStream();

    // Save document in target format
    workbook.SaveDocument(outputStream, outputFormat);

    outputStream.Seek(0, SeekOrigin.Begin);
    return outputStream;
}