我正在使用 ClosedXML 和 C# 来创建 Excel 工作表。
要求是
以下代码对所有列进行写保护,并禁用自动筛选(即使下拉图标可见)。
var exWB = new XLWorkbook();
var exWS = exWB.Worksheets.Add("Sheet1");
exWS.Cell("A1").Value = "ID";
exWS.Cell("B1").Value = "Name";
exWS.Cell("A2").Value = "25";
exWS.Cell("B2").Value = "Fred";
exWS.Cell("A3").Value = "28";
exWS.Cell("B3").Value = "Burt";
.
.
exWS.Columns().AdjustToContents();
exWS.RangeUsed().SetAutoFilter();
exWS.Protect();
exWS.Column("B").Style.Protection.SetLocked(false);
exWB.SaveAs("my.xlsx");
这给出了一个电子表格,其中 A 列被锁定,但 B 列不符合要求,但自动筛选器不会打开选项(卡在所有选项上)。
答案是使用
Protect
命令上的 AutoFilter 选项(我还需要允许 FormatCells 和 InsertColumns 以满足另一个要求)。
exWS.Columns().AdjustToContents();
exWS.RangeUsed().SetAutoFilter();
exWS.Protect().AllowElement(XLSheetProtectionElements.FormatCells)
.AllowElement(XLSheetProtectionElements.InsertColumns)
.AllowElement(XLSheetProtectionElements.AutoFilter);
exWS.Column("B").Style.Protection.SetLocked(false);