在使用 ClosedXML 创建的 Excel 中写入保护列,但允许自动筛选

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

我正在使用 ClosedXML 和 C# 来创建 Excel 工作表。

要求是

  • 允许所有列自动归档
  • 仅允许编辑表格“B”列,写保护其余列
  • 允许列格式设置和添加列。

以下代码对所有列进行写保护,并禁用自动筛选(即使下拉图标可见)。

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 列不符合要求,但自动筛选器不会打开选项(卡在所有选项上)。

c# excel closedxml
1个回答
0
投票

答案是使用

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);
© www.soinside.com 2019 - 2024. All rights reserved.