EPPlus v4 Worksheet.InsertRow ›Ошибка 1024

Обнаружено, что при вставке > 1024 строк с помощью EPPlus v4 (v4.5.3.3) формула в ячейках под новыми вставленными строками повреждается, а одна исходная строка исчезает.

К сожалению, git EPPlus v4 находится в архиве, так как они перешли с LGPL на коммерческую модель лицензирования в v5.

С пробной версией NPOI это не может быть вариантом, поскольку в нем отсутствуют некоторые важные функции, такие как ShiftColumn/DeleteColumn, и он не может поддерживать Excel с таблицей, формулами с использованием условного форматирования и атрибутом обратной совместимости, добавленным MSExcel.

Кто-нибудь из пользователей EPPlus v4 сталкивался с такой же ситуацией и нашел хорошее решение?


person Joe Lau    schedule 18.04.2020    source источник


Ответы (1)


Прежде чем получить лучший ответ, это метод расширения обходного пути, который я использовал для этого случая:

/// <summary>
/// Providing Extensions to EPPlus/Excel
/// </summary>
public static class EPPlusExcelUtil
{
    public const int EPPlusMaxRowInsertPerAction = 1024;

    /// <summary>
    /// This is a workaround to handle the case inserting > 1024 rows.
    /// <remarks>EPPlus v4 issue until v4.5.3.3</remarks>
    /// </summary>
    /// <param name="ws"></param>
    /// <param name="rowFrom">The position of the new row</param>
    /// <param name="rows">Number of rows to insert.</param>
    /// <param name="copyStylesFromRow">Copy Styles from this row. Applied to all inserted rows</param>
    public static void InsertRowEnhanced(this ExcelWorksheet ws, int rowFrom, int rows, int copyStylesFromRow = 0)
    {
        int batchOf1k = rows / EPPlusMaxRowInsertPerAction;
        for (int i = 0; i < batchOf1k; i++)
        {
            ws.InsertRow(rowFrom, EPPlusMaxRowInsertPerAction, copyStylesFromRow);
        }

        int rowsToInsertAfter1k = rows % EPPlusMaxRowInsertPerAction;
        if (rowsToInsertAfter1k != 0)
        {
            ws.InsertRow(rowFrom, rowsToInsertAfter1k, copyStylesFromRow);
        }
    }

}
person Joe Lau    schedule 18.04.2020
comment
у меня такая же проблема, спасибо за решение - person Hoang Tran; 08.01.2021