我想在Excel中冻结前5列和前三行。我已经写了以下代码。
Worksheets.View.FreezePanes(5, 5);
但是它也会冻结前4行中的列。 我想在Excel中冻结前4个列,除了前4行。 这可行吗?
我想在Excel中冻结前5列和前三行。我已经写了以下代码。
Worksheets.View.FreezePanes(5, 5);
但是它也会冻结前4行中的列。 我想在Excel中冻结前4个列,除了前4行。 这可行吗?
第一个值是您想要冻结的行数,第二个值是您想要冻结的列数。因此,要冻结前3行和前5列,您需要将其调用为以下内容:
Worksheets.View.FreezePanes(3, 5);
您还可以查看此SO问题获取有关FreezePanes
的更多信息。
对于我来说,以下代码可以冻结第一行。我不确定其中的逻辑。
worksheet.View.FreezePanes(2,1);
sheet.View.FreezePanes(6, 1);
为我冻结了前5行。 - CAD bloke从ExcelWorksheet对象中访问View属性。
在返回的ExcelWorksheetView对象上调用FreezePanes(row, column)方法,传递第一个未被冻结的单元格的行和列。
例如,要冻结Excel工作表的前两个完整窗格,需要将列(3,1)传递给行参数:
worksheetObject.View.FreezePanes(3, 1);
因此,要完全冻结第一行,只需调用worksheetObject.View.FreezePanes(2,1);
!
EPPlus的官方示例中也提到了这一点。
因此,回答@user2148124提出的原始问题的答案应为
worksheetObject.View.FreezePanes(3, 5);
我知道距离上次发布这个主题已经有很长一段时间了,但最近我正在处理这个问题,并找到了获取我想要的方式(EPPlus v4.5.3):
public static void FreezeHeader(ExcelWorksheet sheet)
{
var xdoc = sheet.WorksheetXml;
var sheetViews = xdoc.GetElementsByTagName("sheetViews");
var sheetViewNode = sheetViews[0].ChildNodes[0];
var paneNode = xdoc.CreateNode(System.Xml.XmlNodeType.Element, "pane", xdoc.DocumentElement.NamespaceURI);
var ySplit = xdoc.CreateAttribute("ySplit");
ySplit.Value = "1";
var topLeftCell = xdoc.CreateAttribute("topLeftCell");
topLeftCell.Value = "A2";
var activePane = xdoc.CreateAttribute("activePane");
activePane.Value = "bottomLeft";
var state = xdoc.CreateAttribute("state");
state.Value = "frozen";
paneNode.Attributes.Append(ySplit);
paneNode.Attributes.Append(topLeftCell);
paneNode.Attributes.Append(activePane);
paneNode.Attributes.Append(state);
sheetViewNode.AppendChild(paneNode);
}
<sheetViews>
<sheetView workbookViewId="0">
</sheetView>
</sheetViews>
<sheetViews>
<sheetView tabSelected="1" topLeftCell="Z1" zoomScale="85" zoomScaleNormal="85" workbookViewId="0">
<pane ySplit="1" topLeftCell="A213" activePane="bottomLeft" state="frozen"/>
<selection activeCell="O1" sqref="O1"/><selection pane="bottomLeft" activeCell="AD229" sqref="AD229"/>
</sheetView>
我推断出我需要将“pane”节点添加到XML结构中:
<pane ySplit="1" topLeftCell="A213" activePane="bottomLeft" state="frozen"/>
您可以调用 sheet.FreezePanes(int rowIndex, int columnIndex) 方法来设置冻结区域。
代码示例:
using System;
using Spire.Xls;
using System.Drawing;
namespace FreezePane
{
class Program
{
static void Main(string[] args)
{
//Load File
Workbook workbook = new Workbook();
workbook.LoadFromFile
(@"E:\Work\Documents\ExcelFiles\UserInfo.xlsx");
Worksheet sheet = workbook.Worksheets[0];
//Freeze Top Row
sheet.FreezePanes(2, 1);
//Save and Launch
workbook.SaveToFile("FreezePane.xlsx", ExcelVersion.Version2010);
System.Diagnostics.Process.Start(workbook.FileName);
}
}
}
EPPlus
,而不是Spire.Xls
。 - Scott Stafford