Мне нужно отфильтровать все эти строки по определенным значениям в столбцах C и BP.
Я протестировал функциональность фильтра в ClosedXML в соответствии с приведенным ниже кодом.
Когда я применяю фильтр к одному столбцу, все работает хорошо, и данные сохраняются. в новом файле.
Когда я пытаюсь применить два фильтра, применяется тот, который выполняется последним.
Я пытался использовать рабочий лист как диапазон/таблицу, та же проблема с фильтрацией.
В конце концов я создал выражение «строки», оно работает, но первая строка (заголовок) отфильтровывается.
Код: Выделить всё
public static void Filter(string source, string newFile)
{
using (var workbook = new XLWorkbook(source))
{
IXLWorksheet worksheet = workbook.Worksheet(1);
int salesFoundCell = worksheet.FirstRow().Cells().First(c => c.Value.ToString() == "Sales Order Description").Address.ColumnNumber;
int revenueFoundCell = worksheet.FirstRow().Cells().First(c => c.Value.ToString() == "Revenue recognition date").Address.ColumnNumber;
//worksheet.RangeUsed().SetAutoFilter().Column(salesFoundCell).EqualTo("Equipment Sale");
//worksheet.RangeUsed().SetAutoFilter().Column(revenueFoundCell).EqualTo("00.00.0000");
//var rows = worksheet.RowsUsed().Where(r => r.CellsUsed().Any(c => c.GetString().Contains("Equipment Sale")) &&
// r.CellsUsed().Any(c => c.GetString().Contains("00.00.0000")));
Console.WriteLine(rows.Count());
//workbook.SaveAs(newFile);
}
}
Это короткая версия:
Код: Выделить всё
public void Create(string filePath)
{
var wb = new XLWorkbook();
IXLWorksheet ws;
#region Multi Column
String multiColumn = "Multi Column";
ws = wb.Worksheets.Add(multiColumn);
// Add filters
ws.RangeUsed().SetAutoFilter().Column(2).EqualTo(3).Or.GreaterThan(4);
ws.RangeUsed().SetAutoFilter().Column(3).Between("B", "D");
// Sort the filtered list
ws.AutoFilter.Sort(3);
#endregion
using (var ms = new MemoryStream())
{
wb.SaveAs(ms);
var workbook = new XLWorkbook(ms);
#region Multi Column
workbook.Worksheet(multiColumn).AutoFilter.Column(3).EqualTo("E");
workbook.Worksheet(multiColumn).AutoFilter.Sort(3, XLSortOrder.Descending);
#endregion
workbook.SaveAs(filePath);
ms.Close();
}
}
Код: Выделить всё
worksheet.RangeUsed().SetAutoFilter().Column(salesFoundCell).EqualTo("Equipment Sale");
worksheet.RangeUsed().SetAutoFilter().Column(revenueFoundCell).EqualTo("00.00.0000");
Все это либо фильтруется по одному столбцу, либо не фильтруется вообще.
Выражение "expression.AddFilter(some value).AddFilter( какое-то другое значение);" не помогает, поскольку я не пытаюсь добавить несколько фильтров в один и тот же столбец.
Функция «И/или» делает то же самое: несколько фильтров в одном столбце.< /p>
Удалось ли кому-нибудь отфильтровать данные по значениям в нескольких столбцах?
Мы будем очень признательны за любые советы.>
Подробнее здесь: https://stackoverflow.com/questions/433 ... le-columns
Мобильная версия