C#互操作中的Excel多列过滤器

问题描述 投票:1回答:1

我在同一文件中有两个Excel工作表,每个工作表包含5列。我的第一个Excel工作表中的数据是唯一的。而第二张纸可以包含重复项。我正在过滤并比较第一张纸中的每个记录与第二张纸中的所有记录。第一工作表中的数据持续数百条记录,但是第二工作表中的数据相当大,例如200k-300k。通过过滤数据进行手动比较会浪费时间。

问题:我试图在c#multiple column filter中自动执行Excel的WinForms标准。

我尝试过的事情:我以为锯齿状阵列可以解决问题,因此创建了两个Jagged Arrays。每个锯齿状数组动态填充1张数据。因此,JaggedAry1将包含来自Sheet1JaggedAry2Sheet2的数据。如果我没看错,可能是锯齿状的数组看起来像这样:

JaggedAry1:

Row 1           Name   Jim   Bob   Joe    
Row 2           Age    25    30    35
Row 3           ID     1AB   2C    2BE
Row 4           Addr   Ad1   Ad2   Ad3
Row 5           DOB    D1    D2    D3

JaggedAry2:

Row 1           Name   Jim   Bob   Joe    Jim   Bob   Jim    Joe   Bob   Sam    
Row 2           Age    25    30    35     25    32    35     25    30    35
Row 3           ID     1AB   2C    2BE    1AB   2C    2D     AB    2W    2E
Row 4           Addr   Ad1   Ad2   Ad3    Ad1   Ad2   Ad4    Ad5   Ad6   Ad7
Row 5           DOB    D1    D2    D3     D1    D2    D3     D3    D4    D5

示例结果:如果我有两个组织的数据,Jim可以是多个人的名字,并且可以具有相同的ID。如果在sheet1中,我有一个员工姓名Jim,其DOB于1988年1月25日且ID = 2,则在sheet2中,我要列出所有DOB将在1988年1月25日或之后的Jim's,相同的ID,即ID = 2。地址可以相同或不同。

我知道我可以使用foreach循环来完成此操作,但我认为这将需要大量临时变量进行多次比较。所以我想是否有一种更简单的方法?

:我还尝试使用InteropExcel的Range Filter直接在第二张纸上应用过滤器。但这仅对少量数据有效。具有大量数据的Excel文件非常耗时。

如果有人能指出我正确的方向,那真是太好了。预先感谢。

c# excel-interop jagged-arrays
1个回答
0
投票

所以Excel有其限制,最多有30万行,因此迁移到sql数据库可能会很有趣。

但是如果您不计划此解决方案并保留Excel,我建议您使用ExcelDataReader来读取大型excel文件,并与Linq / LinqToSql一起使用以过滤数据。 ExcelDataReader非常适合快速读取大文件。

© www.soinside.com 2019 - 2024. All rights reserved.