我在同一文件中有两个Excel工作表,每个工作表包含5列。我的第一个Excel工作表中的数据是唯一的。而第二张纸可以包含重复项。我正在过滤并比较第一张纸中的每个记录与第二张纸中的所有记录。第一工作表中的数据持续数百条记录,但是第二工作表中的数据相当大,例如200k-300k。通过过滤数据进行手动比较会浪费时间。
问题:我试图在c#multiple column filter
中自动执行Excel的WinForms
标准。
我尝试过的事情:我以为锯齿状阵列可以解决问题,因此创建了两个Jagged Arrays
。每个锯齿状数组动态填充1张数据。因此,JaggedAry1
将包含来自Sheet1
的JaggedAry2
和Sheet2
的数据。如果我没看错,可能是锯齿状的数组看起来像这样:
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文件非常耗时。
如果有人能指出我正确的方向,那真是太好了。预先感谢。
所以Excel有其限制,最多有30万行,因此迁移到sql数据库可能会很有趣。
但是如果您不计划此解决方案并保留Excel,我建议您使用ExcelDataReader来读取大型excel文件,并与Linq / LinqToSql一起使用以过滤数据。 ExcelDataReader非常适合快速读取大文件。