ExcelMapper - 根据条件跳过行

ExcelMapper - Skip Row based on Condition

正在读取包含财务数据的 excel 文件并使用 ExcelMapper 将其映射到对象。

    public static async IAsyncEnumerable<TReceipt> ReadBankEntry(string file)
    {
        using (FileStream stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite))
        {
            ExcelMapper mapper = new ExcelMapper() 
            { 
                HeaderRowNumer = 0 // zero is the default
                MinRowNumber = 2 // actual data starts from here (skipping row=1)
                // MaxRowNumber = ? this is dynamic and can change in every excel file.
            };
            // my mapping table here
            foreach (TReceipt bankEntry in await mapper.FetchAsync<TReceipt>(stream, "Sheet1"))
            {
                yield return bankEntry;
            }
        };
    }

文件中的最后 3 行包含我不需要的信息,并且在某些列中还包含字符串值,这些值应该只包含十进制类型,这最终会引发异常。从这一行开始还有一些列是空的。

例子-

+----+-----------------+--------------+
| SL |      Date       |      P1      |
+----+-----------------+--------------+
|    | Opening Balance | USD 10254.66 |
|  1 | 01-07-2020      | 445.25       |
|  2 | 01-07-2020      | 234.80       |
|  3 | 02-07-2020      | 13.00        |
|    | Total           | USD 10947.71 |
+----+-----------------+--------------+

我想在数据到达这一行后停止读取数据。我如何使用 ExcelMapper 做到这一点?

编辑:任何其他具有类似功能的库都可以。请注意,文件将具有 xls 扩展名(旧格式)。

在向 ExcelMapper 的创建者 Michael Gans 提出问题后;他说 (link) -

If the mapping doesn't generate any errors I would probably handle this with a classic .Where() (or .TakeWhile()). Otherwise you can try and use the custom mapping methods to avoid any errors and then filter.

If you do know the range of rows in advance you can use the data row range properties.

我希望有一种内置的方法来处理类型不正确的行,以避免由于在捕获所有数据点后进行过滤而导致性能下降(超过 100000 行),但这仍然是具有可读代码的最快的库与其他图书馆相比。