使用 EPPlus 查找冻结的窗格

Finding Frozen Panes with EPPlus

是否可以使用 EPPlus 找到冻结的窗格?例如,在我正在使用的电子表格中,6 以上的任何行都被冻结,D 之前的任何列都被冻结。有没有办法在给定的工作表中检测到这些?

我知道 EPPlus 有一个选项可以在给定行和列的情况下冻结窗格。浏览源代码,我可以看到这个方法位于ExcelWorksheetView.cs。此外,实际将状态设置为冻结的行是:paneNode.SetAttribute("state", "frozen");,其中 paneNodeXmlElement.

鉴于此信息,我使用 Visual Studio 的调试器搜索工作表,试图找到有关冻结状态的相关信息,但我还没有找到任何信息。我还检查了它是否记录在单个单元格中,但还是没有运气。

我是这个库的新手,一般阅读 Excel 文件,希望更有经验的人能够帮助我找到如何准确地检测给定工作表中的冻结窗格。

我找到了适合我的解决方案。主窗格的状态可以在 worksheet.View.TopNode.InnerXml 中找到。此外,xSplitySplit 值也可以。

为了达到这些值:

var field = worksheet.View.GetType().GetProperty("TopNode", BindingFlags.NonPublic | BindingFlags.Instance);
XmlNode node = (XmlNode) field.GetValue(worksheet.View);
var pane = node.SelectSingleNode("//*[local-name()='pane']");

var state = pane.Attributes?["state"]?.Value;
var xSplit= pane.Attributes?["xSplit"]?.Value;
var ySplit= pane.Attributes?["ySplit"]?.Value;

从那里我可以检查面板的状态,以及查看拆分的 x 和 y 位置。