gpt4 book ai didi

c# - ClosedXML Excel 按多列中的值过滤行

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:24 26 4
gpt4 key购买 nike

我有一个包含数千行和数千列的 Excel 文件,最多可达“BP”。我需要按 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);
}
}

我还尝试了 ClosedXML wiki 上发布的方法,将工作表保存为 MemoryStream,重新应用过滤器,然后将其保存到新文件。

这是简短的版本:

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(some other value);”没有帮助,因为我没有尝试在同一列上添加多个过滤器

“和/或”功能在同一列上执行相同的多个过滤器。

有没有人设法根据多列中的值进行过滤?

非常感谢任何建议。

最佳答案

试试下面的排序方法找到here

myRange.SortColumns.Add(firstColumnNumber, XLSortOrder.Ascending);
myRange.SortColumns.Add(secondColumnNumber, XLSortOrder.Ascending);
myRange.Sort();

关于c# - ClosedXML Excel 按多列中的值过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43324643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com