隐藏EPPlus中的列不起作用

时间:2018-07-19 21:52:22

标签: c# epplus

我想使用EPPlus nuget包在excel中隐藏一列,但它不起作用(它没有隐藏该列)

这是我发现应该可以解决的问题。也许有错误?

worksheet.Column(1).Hidden = true;

我正在使用版本4.5.2.1

项目URL https://github.com/JanKallman/EPPlus

3 个答案:

答案 0 :(得分:2)

我在打电话

worksheet.Cells.AutoFitColumns();

之后

worksheet.Column(1).Hidden = true;

答案 1 :(得分:1)

显然,根据文档,您可以使用AutoFitColumns(Double MinimumWidth, Double MaximumWidth)

  

根据范围的内容设置列宽。注意:如果不进行任何计算,则将忽略包含公式的单元格。包装和合并的单元格也将被忽略。 隐藏的列被隐藏

    worksheet.Column(1).Hidden = true;
    worksheet.Cells.AutoFitColumns(8.43,100); // 8.43 = default width of cells

答案 2 :(得分:1)

I'm pretty sure it's a bug.

截至撰写本文(2019-10-24)时,AutoFitColumns中的代码试图避免对隐藏的列进行自动拟合,但在辅助方法(SetMinWidth)被执行后才执行调用会遍历所有设置最小宽度的列,并且Width设置器会产生副作用,如果宽度非零,则将_hidden设置为false,这是使用时AutoFitColumns的零参数过载。

如果您使用AutoFitColumns的1或2参数重载来传递最小宽度为零,则列将保持隐藏状态,但您的空列将为零宽度,因此实际上不是解决方法。

这是我暂时使用的扩展方法:

static void AutoFitColumnsAndRehide(this ExcelRangeBase range)
{
    range.Reset();

    var hiddenColumns = range
        .Select(cell => cell.Start.Column)
        .Distinct()
        .Select(range.Worksheet.Column)
        .Where(column => column.Hidden)
        .ToList();

    range.AutoFitColumns();

    foreach (var column in hiddenColumns)
    {
        column.Hidden = true;
    }
}

显然,也可以针对1参数和2参数过载进行调整。