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。
进行此更改可阻止错误一起抛出。
我在尝试从 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。
进行此更改可阻止错误一起抛出。