如何使Excel列只读,但在EPPlus C#中重新调整大小?

时间:2015-09-25 06:16:10

标签: c# .net excel epplus epplus-4

在我的MVC项目中,用户可以在UI中选择一些产品,并以Excel(.xlsx)格式下载相关的产品信息。

我们的业务要求是,除少数列/单元外,文件应该是只读的。我使用EPPlus 4.0.4生成Excel,到目前为止它的工作效果很好。

我面临的问题是,当我保护工作表时,用户无法再重新调整列的大小(拖动标题以更改列宽)。因此,某些列中的文本不完全可见。为了解决这个问题,我将它们设置为AutoFit(下面的代码为##)。因此,文本现在可见。但是,用户仍然无法更改它们应该能够的列宽。

所以我的问题是,我可以将单元格/列设置为只读,但是像普通Excel一样使它们重新调整大小吗?

我的代码

//using OfficeOpenXml;
//using OfficeOpenXml.Style;
private void ProtectExcel(ExcelWorksheet ws, int columnCount)
{
    ws.Protection.AllowSort = true;
    ws.Protection.AllowSelectUnlockedCells = true;
    ws.Protection.AllowAutoFilter = true;

    for (int i = 1; i <= columnCount; i++)
    {
        ws.Column(i).Style.Locked = true; //making read-only
        ws.Column(i).AutoFit(); //## showing all text
    }

    ws.Protection.IsProtected = true; //making the sheet protected 
}

1 个答案:

答案 0 :(得分:2)

ws.Protection属性上有许多属性用于指定要保护的内容。一个是AllowFormatColumns,所以:

ws.Protection.AllowFormatColumns = true;