2011-06-21 36 views

Respuesta

9

Estaba tratando de resolver el mismo problema y terminé por abrir la herramienta de productividad Open XML SDK 2.0 y el uso de la función Compare Files... para comparar dos hojas de cálculo, una con paneles congelados y otra sin ella.

Cuando lo hice, me llevó a código que parecía básicamente lo siguiente:

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; 

he añadido esto a mi programa y parece que hacer el truco.

+2

que estaba usando el código anterior y estaba generando una excepción. Resulta que no había hecho una selección real en la hoja de cálculo que estaba usando, por lo que el objeto de selección era una referencia nula. Seleccionar "A2" me ayudó. – Steve

+1

¿cómo está creando su hoja de trabajo? Estoy creando el mío en la corriente de la memoria y cuando voy a congelar una fila, usando el código anterior obtengo la excepción nula de las hojas de cálculo. – eaglei22

7

Puede añadir la selección así:

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); 
Cuestiones relacionadas