C# EPPlus DeleteRow 错误 - 源数组不够长

C# EPPlus DeleteRow Error- Source Array Was Not Long Enough

我在尝试从 excel 文件中删除数千行时遇到错误。

我在 C# 中使用 EPPlus 来修改数据。

这是我运行做删除的代码:

rowsToDelete.Reverse();

foreach (var row in rowsToDelete)
{
    try
    {
        worksheet.DeleteRow(row);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

'rowsToDelete' 是在前面一段代码中获取的,它只是根据工作表中的数据获取我们需要删除的行号。

'rowsToDelete' 是这样定义的列表:

List<int> rowsToDelete = new List<int>();

我得到的错误是:

Source array was not long enough. Check the source index, length, and the array's lower bounds. (Parameter 'sourceArray')

此 Excel 文件中的行数为 65152,在这种情况下,我试图删除 65147 行。通常我不会删除这么多行,但这次我需要这样做。

我注意到抛出错误的行中存在一种模式。每第 1024 行它都会捕获同样的异常。

我认为这可能是我单独删除每一行的方式,所以我将其交换为使用大组删除:

worksheet.DeleteRow(rowFrom, rows, true);

但是会出现同样的错误。

上面关于 rowsToDelete 的 Reverse() 函数只是确保我们从下往上删除,所以它不会导致行移动和您删除错误行的任何问题。

如有任何帮助,我们将不胜感激!

通过获取有关问题的更多信息的过程,我找到了答案。

我正在使用:

List<int> rowsToDelete = new List<int>();

初始化列表,但是我开始尝试赋予它初始化能力,如下所示:

List<int> rowsToDelete = new List<int>(maxRowNumber);

我将 'maxRowNumber' 设置为 1,000,000。

进行此更改可阻止错误一起抛出。