在EPPlus中冻结列(Excel分割函数)

39

我一直在使用EPPlus为项目需要生成Excel文件。他们想要的大多数导出与他们现有的遗留系统中的导出完全匹配。然而其中一个,他们希望它与遗留系统中的某个导出完全相同,经过一些典型和特定的编辑

但是他们所做的一些编辑使每行比他们想要的要长得多,因此他们希望在屏幕上保留一些列信息的位置,而其他列可以像常规情况下一样滚动(即Excel的拆分功能)。我已经尝试使用ws.Column(6).Style.Locked = true锁定列,但似乎不起作用。我还尝试将单元格范围的Locked属性设置为true,但这也没有起作用。

如何将列固定在原处?

2个回答

67
原来EPPlus自带了一个在工作表对象上执行此操作的内置函数,称为FreezePanes。该函数有两个参数,都是整数:行和列。这样做将冻结您希望在查看工作表时锁定的任何行或列。
EPPlus网站上的示例之一使用它,尽管它不是示例的主要焦点。可以在此处找到
但是,使用此功能需要注意一点:用于行或列参数的数字实际上是未固定在原位的第一列。换句话说,如果您想要冻结前5列,则必须进行以下调用:ws.View.FreezePanes(1,6)(其中6是未冻结的第一列)。

IronMan84: 我想在我的Excel表头中冻结前5列,我编写了以下代码:xlWorkSheet.View.FreezePanes(1, 6); 但是它不仅仅冻结了第一行的5列,而是所有行的5列。有什么办法可以实现我想要的结果吗? - Zeeshan Ajmal
IronMan84: 有没有办法指定固定行和列的范围,而不仅仅是给出起始索引? - Zeeshan Ajmal
Excel不允许您冻结单元格的范围,仅限于电子表格顶部和左侧的列或行。但是,您可以使用Split函数将工作表分成可以使用滚动条导航的各个部分。有关更多详细信息,请参见http://classroom.synonym.com/freeze-selection-excel-11819.html。 - David Keaveny
@DavidKeaveny 这就是为什么我在标题中加入了“Excel分割函数”这些词。我之所以称其为“Freeze”,只是因为在EPPlus中的函数调用是这个名字。 - Corey Adler

15

我意识到当使用 @IronMan84 的建议时,如果您只对行感兴趣而不是列,您可以使用

ws.View.FreezePanes(3, 1); // (Freeze Row 2 and no column)

这是正确的。试图将其设置为零会导致Excel报告文档损坏的错误。将2添加到您想要冻结的行和/或列的数量即可。 - jocull
抱歉,那是错误的——将行数/列数加1! - jocull

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