我在使用 NPOI 的受保护工作表中打开自动筛选器生成 excel 时遇到问题。
我有一个 Excel 模板,如下所示:
我们需要实现的是,在每个表头中启用过滤器,并保护工作表。 它会是这样的:
这可以通过在 Excel 中的“审阅”>“保护工作表”中选中“排序”和“自动筛选”来实现。
我正在尝试使用 NPOI 重现这一点。但是,标题中的筛选器无法单击,并且保护表中的使用自动筛选和排序未选中。
我的代码:
IWorkbook workbook = null;
ISheet worksheet = null;
using (FileStream FS = new FileStream(infoFile.FullName, FileMode.Open, FileAccess.Read))
{
workbook = WorkbookFactory.Create(FS);
worksheet = workbook.GetSheetAt(0);
}
//SET FILTER
worksheet.SetAutoFilter(CellRangeAddress.ValueOf("A3:G3"));
//SET PROTECTED SHEET
XSSFSheet bullSheet = ((XSSFSheet)worksheet);
bullSheet.LockAutoFilter(false);
bullSheet.LockSort(false);
bullSheet.LockSelectLockedCells(false);
bullSheet.ProtectSheet("");
//EXPORT FILE
Stream excelStream = new MemoryStream();
workbook.Write(excelStream, true);
var fileStream = File.Create(infoFile.DirectoryName + "\\" + Path.GetFileNameWithoutExtension(infoFile.FullName) + "_test.xlsx");
excelStream.Seek(0, SeekOrigin.Begin);
excelStream.CopyTo(fileStream);
fileStream.Close();
excelStream.Close();
我尝试了其他问题的几种解决方案,但没有给出相同的结果问题1,问题2,问题3。
请帮忙解决这个问题。我相信有些事情是错误的或更少的。
谢谢你。
我也遇到了同样的问题。 我认为我不确定这是正确的解决方案, 在 Protect 方法之后调用所有 Unlock 方法,启用过滤器。 你能试试这个吗?
//调用
bullSheet.ProtectSheet("");
//然后调用
bullSheet.LockAutoFilter(false);