使用EPPlus查找冻结窗格

3
有没有可能使用EPPlus找到冻结的窗格?例如,在我工作的电子表格中,6行之前的任何行都被冻结,D列之前的任何列都被冻结。是否有办法在给定的工作表中检测到这些内容呢?
我知道EPPlus有一个选项可以冻结给定的行和列。浏览源代码,我可以看到这个方法位于ExcelWorksheetView.cs中。此外,实际设置状态为frozen的行是:paneNode.SetAttribute("state", "frozen");其中paneNode是一个XmlElement。
考虑到这一点,我使用Visual Studio的调试器搜索工作表,试图找到有关冻结状态的相关信息,但我还没有找到任何信息。我还检查了它是否记录在单个单元格中,但同样没有运气。
我对这个库和阅读Excel文件总体而言还比较新,希望有更多经验的人能够帮助我找到如何检测给定工作表中冻结窗格的确切位置。

我成功地找到了状态,它位于worksheet.View.Panes[0].TopNode.NextSibling.OwnerDocument.DocumentElement.InnerXml中的非公共成员中,其中0是索引。希望我能找到一种利用这些信息的方法。 - josephoneill
1个回答

4

我找到了一个适合我的解决方案。主窗格的状态可以在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位置。


感谢分享。顺便提一下:当没有冻结行/列时,pane 将为 null,但很快就会变得明显。 - H. de Jonge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接