EPPlus v4 Worksheet.InsertRow> 1024错误

问题描述 投票:0回答:1

[发现在使用EPPlus v4(v4.5.3.3)插入> 1024行时,新插入的行下的单元格中的公式已损坏,并且原来的一行消失了。

不幸的是,EPPlus v4 git在v5中从LGPL转换为商业许可模型时已被归档。

在NPOI上进行试用,由于缺少一些关键功能(例如ShiftColumn / DeleteColumn,并且不能使用表支持Excel,不使用公式,使用ConditionalFormatting且不支持MSExcel添加的向后兼容属性,因此无法选择它) 。

任何人EPPlus v4用户都面临同样的情况,并找到了一个好的解决方案?

excel epplus npoi epplus-4
1个回答
0
投票

在获得更好的答案之前,这是一种解决方法,我在这种情况下使用了扩展方法:

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

}
© www.soinside.com 2019 - 2024. All rights reserved.