【发布时间】:2020-09-18 18:44:42
【问题描述】:
我在同一个文件中有两个 excel 表,每个表包含 5 列。我的第一个 Excel 表中的数据是独一无二的。而第二张表可以包含重复项。我正在过滤并将第一张纸中的每条记录与第二张纸中的所有记录进行比较。第一张表中的数据持续数百条记录,但第二张表中的数据非常大,比如 200k-300k。通过过滤数据进行手动比较非常耗时。
问题:我正在尝试在 c#WinForms 中自动化这个 multiple column filter excel 标准。
我尝试了什么:我认为 Jagged Arrays 可以解决问题,因此创建了两个 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,其出生日期为 1988 年 1 月 25 日并且 ID=2,那么在sheet2 中,我想列出所有出生日期为 1988 年 1 月 25 日或之后的 Jim,其中相同的 ID,即 ID=2。地址可以相同也可以不同。
我知道我可以使用foreach 循环来做到这一点,但我认为这将需要大量临时变量来进行多重比较。所以我想是否有更简单的方法?
注意:我还尝试使用 InteropExcel 的 Range Filter 在第二张表上直接应用过滤器。但这仅适用于少量数据。包含大量数据的 Excel 文件非常耗时。
如果有人能指出我正确的方向,那就太好了。提前致谢。
【问题讨论】:
-
反正有 200k-300k 行,我们会花时间阅读......
标签: c# excel-interop jagged-arrays