【问题标题】:Protected worksheet with Epplus - need to allow filtering and sorting. Sorting not permitted使用 Epplus 保护的工作表 - 需要允许过滤和排序。不允许排序
【发布时间】:2021-04-24 07:21:51
【问题描述】:

以下方法的目的是在使用 Epplus 将数据写入工作表后对其进行样式设置和保护。样式正确,并且适​​当的单元格(在特定行中)受到保护。它旨在允许排序和过滤,尽管“标题”行单元格受到保护。

在生成的电子表格中,Excel 允许执行过滤。但是,排序遇到错误消息。如何解决?

public void FormatSpreadsheet(ExcelWorksheet worksheet)
{
    ExcelRange range;

    // styling header cells...

    range.AutoFilter = true;

    // protect headers and allow sorting and filtering, amongst other things
    worksheet.Protection.IsProtected = true;
    worksheet.Protection.AllowAutoFilter = true;
    worksheet.Protection.AllowDeleteColumns = false;
    worksheet.Protection.AllowDeleteRows = true;
    worksheet.Protection.AllowEditObject = true;
    worksheet.Protection.AllowEditScenarios = true;
    worksheet.Protection.AllowFormatCells = true;
    worksheet.Protection.AllowFormatColumns = true;
    worksheet.Protection.AllowFormatRows = true;
    worksheet.Protection.AllowInsertColumns = false;
    worksheet.Protection.AllowInsertHyperlinks = false;
    worksheet.Protection.AllowInsertRows = true;
    worksheet.Protection.AllowPivotTables = false;
    worksheet.Protection.AllowSelectLockedCells = true;
    worksheet.Protection.AllowSelectUnlockedCells = true;
    worksheet.Protection.AllowSort = true;

    // set a random password so it's impossible for anybody to edit the protected cells...

    // autofit columns
    range = worksheet.Cells[1, 1, worksheet.Dimension.End.Row, lastHeaderCol];
    range.AutoFitColumns();
}

【问题讨论】:

  • 错误信息是什么?
  • @AhmadBagadood “您尝试更改的单元格或图表位于受保护的工作表上”。

标签: c# .net excel spreadsheet epplus


【解决方案1】:

您需要真正激活自动过滤器,而不仅仅是允许它。要使用工作表的第一行作为标题进行过滤,您上面的 range 对象将起作用,您只需要再设置一个属性:

range.AutoFilter = true;

【讨论】:

  • 我在设置所有 ws.Protection 属性的代码块上方尝试了这个(上面更新了代码),但它仍然不允许在生成的 Excel 中进行排序。 “您尝试更改的单元格或图表位于受保护的工作表上。”
  • 啊!我在您的问题中错过了这一点,我说的是自动过滤器本身,而不是排序。无论AllowSort 设置如何,无论您使用普通排序命令还是自动筛选内置的命令,您都无法对锁定工作表上的数据进行排序。对锁定的工作表进行排序将需要一个宏 (VBA),并且还需要您使用 UserInterFaceOnly:=true 选项保护工作表。这不能在 EPPlus 中设置,您必须通过在工作簿中运行的宏进行设置(每次打开工作簿时)。
  • 是的,我怀疑,因为似乎其他人也有这个问题。 EPPlus 是否支持在电子表格中创建宏?
  • 是的!只需为您的workbook.CodeModule.Codeworksheet.CodeModule.Code 分配一个字符串,用于工作簿或工作表级宏(事件处理程序等),或者使用Workbook.VbaProject.Modules.AddModule 创建新模块,然后设置返回对象的Code 属性。并确保扩展名设置为.xlsm
猜你喜欢
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多