C# OpenXml SDK 2.0 for Excel文档中的冻结窗格

C# OpenXml SDK 2.0 for Excel文档中的冻结窗格,c#,excel,openxml,C#,Excel,Openxml,我正在使用OpenXml生成一个Excel工作簿,并一直遵循 如果我可以冻结顶部窗格,这将非常有用,但我找不到一种方法来做到这一点。我意识到,如果我使用OpenXMLSDK,我可以做到这一点,但现在我想坚持使用OpenXMLSDK 有什么想法吗?我试图解决同样的问题,结果打开了OpenXMLSDK2.0生产力工具,并使用比较文件…功能比较两个电子表格,一个有冻结的窗格,另一个没有 当我这样做的时候,我被引导到代码中,代码基本上是这样的: WorkbookPart wbp = doc.Workbo

我正在使用OpenXml生成一个Excel工作簿,并一直遵循

如果我可以冻结顶部窗格,这将非常有用,但我找不到一种方法来做到这一点。我意识到,如果我使用OpenXMLSDK,我可以做到这一点,但现在我想坚持使用OpenXMLSDK


有什么想法吗?

我试图解决同样的问题,结果打开了OpenXMLSDK2.0生产力工具,并使用
比较文件…
功能比较两个电子表格,一个有冻结的窗格,另一个没有

当我这样做的时候,我被引导到代码中,代码基本上是这样的:

WorkbookPart wbp = doc.WorkbookPart;
WorksheetPart wsp = wbp.WorksheetParts.First();

SheetViews sheetviews = wsp.Worksheet.GetFirstChild<SheetViews>();
SheetView sv = sheetviews.GetFirstChild<SheetView>();
Selection selection = sv.GetFirstChild<Selection>();
Pane pane = new Pane(){ VerticalSplit = 1D, TopLeftCell = "A2", ActivePane = PaneValues.BottomLeft, State = PaneStateValues.Frozen };
sv.InsertBefore(pane,selection);
selection.Pane = PaneValues.BottomLeft;
WorkbookPart wbp=doc.WorkbookPart;
WorksheetPart wsp=wbp.WorksheetParts.First();
SheetViews SheetViews=wsp.Worksheet.GetFirstChild();
SheetView sv=sheetviews.GetFirstChild();
Selection=sv.GetFirstChild();
Pane Pane=new Pane(){verticalspit=1D,TopLeftCell=“A2”,ActivePane=PaneValues.BottomLeft,State=PaneStateValues.freezed};
sv.InsertBefore(窗格,选择);
selection.Pane=PaneValues.BottomLeft;

我将此添加到我的程序中,它似乎起到了作用。

您也可以添加选择:

WorkbookPart wbp = doc.WorkbookPart;
WorksheetPart wsp = wbp.WorksheetParts.First(); 

SheetViews sheetViews = wsp.Worksheet.GetFirstChild<SheetViews>();
SheetView sheetView = sheetViews.GetFirstChild<SheetView>();

Selection selection1 = new Selection() { Pane = PaneValues.BottomLeft };

Pane pane1 = new Pane() { VerticalSplit = 1D, TopLeftCell = "A2", ActivePane = PaneValues.BottomLeft, State = PaneStateValues.Frozen };

sheetView.Append(pane1);
sheetView.Append(selection1);
WorkbookPart wbp=doc.WorkbookPart;
WorksheetPart wsp=wbp.WorksheetParts.First();
SheetViews SheetViews=wsp.Worksheet.GetFirstChild();
SheetView SheetView=sheetViews.GetFirstChild();
Selection selection1=new Selection(){Pane=PaneValues.BottomLeft};
Pane pane1=new Pane(){VerticalSplit=1D,TopLeftCell=“A2”,ActivePane=PaneValues.BottomLeft,State=PaneStateValues.Frozed};
sheetView.Append(第1窗格);
sheetView.Append(选择1);

当我使用其他答案中提供的代码时,我不断收到SheetView的空错误。我使用SDK生产力工具查看带有冻结窗格的excel文档的代码,这有助于我创建以下代码。我必须创建SheetView和SheetView类的新实例并附加它们,而不是使用GetFirstChild方法

这是代码

WorkbookPart workbookPart = document.AddWorkbookPart();
workbookPart.Workbook = new Workbook();

WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet();

SheetViews sheetViews = new SheetViews();
SheetView sheetView = new SheetView() { TabSelected = true, WorkbookViewId = (UInt32Value)0U };
Pane pane = new Pane() { ActivePane = PaneValues.BottomLeft, State = PaneStateValues.Frozen, TopLeftCell = "A2", VerticalSplit = 1D };
Selection selection = new Selection() { Pane = PaneValues.BottomLeft };
sheetView.Append(pane);
sheetView.Append(selection);
sheetViews.Append(sheetView);
worksheetPart.Worksheet.Append(sheetViews);

2021年2月3日的反馈:

您只需在生成类中添加Excel文件的内容,如下所示:

Pane FrozeShutterLine1= new Pane() { VerticalSplit = 1D, TopLeftCell = "A2", ActivePane = PaneValues.BottomLeft, State = PaneStateValues.Frozen };
这条线确实可以冻结上面那条线的所有百叶窗

不带固定挡板的电子表格代码:

带固定百叶窗的电子表格代码:


我分享这一反馈,因为在找到如何做之前,我也搜索了一段时间。

我使用了上面的代码,并生成了一个异常。结果表明,我在使用的电子表格中没有进行实际选择,因此选择对象是空引用。选择“A2”让我通过了。你是如何创建工作表的?我在memorystream中创建我的行,当我冻结一行时,使用上面的代码我得到sheetviews空异常。
Pane FrozeShutterLine1= new Pane() { VerticalSplit = 1D, TopLeftCell = "A2", ActivePane = PaneValues.BottomLeft, State = PaneStateValues.Frozen };