EPPlus v4 Worksheet.InsertRow> 1024 ошибка - PullRequest
0 голосов
/ 18 апреля 2020

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

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

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

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

1 Ответ

0 голосов
/ 18 апреля 2020

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

/// <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);
        }
    }

}
...