Ich muss alle diese Zeilen nach bestimmten Werten in den Spalten C und BP filtern.
Ich habe die Filterfunktionalität in ClosedXML gemäß dem folgenden Code getestet.
Wenn ich einen Filter auf eine Spalte anwende, funktioniert alles gut und die Daten werden in der neuen Datei gespeichert.
Wenn ich es versuche Wenden Sie zwei Filter an, der zuletzt ausgeführte ist derjenige, der angewendet wird.
Ich habe versucht, das Arbeitsblatt als Bereich/Tabelle zu verwenden, dasselbe Filterproblem.
Ich habe schließlich den Ausdruck „rows“ erstellt, der funktioniert, aber die erste Zeile (Kopfzeile) wird herausgefiltert.
Code: Select all
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);
}
}
Dies ist die Kurzversion:
Code: Select all
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();
}
}
Code: Select all
worksheet.RangeUsed().SetAutoFilter().Column(salesFoundCell).EqualTo("Equipment Sale");
worksheet.RangeUsed().SetAutoFilter().Column(revenueFoundCell).EqualTo("00.00.0000");
Alle Filter basieren entweder auf einer Spalte oder überhaupt nicht.
Der „Ausdruck.AddFilter(ein Wert).AddFilter(ein anderer Wert);“ Hilft nicht, da ich nicht versuche, mehrere Filter in derselben Spalte hinzuzufügen.
Die „Und/Oder“-Funktionalität bewirkt dasselbe, mehrere Filter in derselben Spalte.
Hat es irgendjemandem geschafft, basierend auf Werten in mehreren Spalten zu filtern?
Jeder Rat wäre mir sehr willkommen.
Mobile version