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

本文关键字:新调整 调整 EPPlus Excel 何使 只读 | 更新日期: 2023-09-27 18:14:33

在我的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 
}

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

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

ws.Protection.AllowFormatColumns = true;