使用EPPlus查找冷冻窗格

时间:2019-06-19 16:10:16

标签: c# .net epplus

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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