2011-06-21 11 views
5

jestem generujących skoroszyt programu Excel przy użyciu OpenXML i zostały następujące przykłady w http://msdn.microsoft.com/en-us/library/cc850837.aspxZablokuj okienka w OpenXml SDK 2.0 dla dokumentu Excel

Byłoby naprawdę przydatny, czy mogę zablokować górną tafli, ale nie mogę” t znaleźć sposób na zrobienie tego. Rozumiem, że mogę to zrobić, jeśli używam http://closedxml.codeplex.com/, ale na razie chciałbym trzymać się zestawu SDK OpenXML

Jakieś pomysły?

Odpowiedz

9

Próbowałem rozwiązać ten sam problem i w końcu otworzyłem narzędzie wydajności Open XML SDK 2.0 i używając funkcji Compare Files..., aby porównać dwa arkusze kalkulacyjne, jeden z zamrożonymi panelami i jeden bez.

Kiedy to zrobiłem, byłem doprowadziły do ​​kodu, który wyglądał w zasadzie tak:

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; 

I dodaje to do mojego programu i wydawało rade.

+2

używałem powyższy kod i został generowania wyjątek. Okazuje się, że nie dokonałem właściwego wyboru w arkuszu kalkulacyjnym, którego używałem, więc obiekt wyboru był zerowym referencją. Wybór "A2" przeprowadził mnie. – Steve

+1

w jaki sposób tworzysz swój arkusz? Tworzę mój w memorystream i kiedy idę do zamrożenia wiersza, przy użyciu powyższego kodu otrzymuję odsłony null wyjątek. – eaglei22

7

Możesz dodać Selection także:

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); 
Powiązane problemy