2013-08-12 8 views
27

Ich habe viel mit EPPlus gearbeitet, um Excel-Dateien für die Anzahl der Exporte, die mein Projekt erfordert, zu generieren. Die meisten Exporte, die sie wünschen, passen perfekt zu Exporten, die sie bereits in ihrem Altsystem haben. Einer von ihnen will jedoch anders. Sie möchten, dass es genau wie einer der Exporte aus dem Altsystem aussieht, nachdem sie einige typische und spezifische Änderungen vorgenommen haben.Einfrieren Spalten in EPPlus (eine Excel-Split-Funktion)

Einige Bearbeitungen machen jedoch jede Zeile viel länger, als sie es haben möchten. Daher möchten sie einen Teil der Spalteninformationen auf dem Bildschirm festhalten, während der Rest der Spalten dies kann wie normal gescrollt werden (zB Excel's Split-Funktion). Ich habe versucht, die Spalten mit ws.Column(6).Style.Locked = true zu sperren, aber das scheint nicht zu funktionieren. Ich habe auch versucht, die Eigenschaft eines Zellbereichs auf True zu setzen, aber das hat auch nicht funktioniert.

Wie kann ich die Säulen einfrieren?

Antwort

50

Es stellt sich heraus, dass EPPlus eine integrierte Funktion für das Worksheet Objekt selbst FreezePanes hat. Diese Funktion hat 2 Parameter, die beide int sind: Zeile und Spalte. Dadurch werden alle Zeilen oder Spalten eingefroren, die Sie beim Anzeigen des Arbeitsblatts einrasten möchten.

Eines der Beispiele auf der EPPlus-Website verwendet es, obwohl es nicht der Hauptfokus des Beispiels ist/Dieses Beispiel kann found here lauten.

Es gibt eine Gotcha mit dieser Funktion, die Sie kennen sollten, aber: Die Zahl, die Sie für die Zeile oder Spalte Parameter verwenden, ist eigentlich die erste Spalte, die NICHT gefroren anstelle ist. Mit anderen Worten, wenn Sie wollen die ersten 5 Spalten eingefroren werden würden Sie den folgenden Aufruf vornehmen:

ws.View.FreezePanes(1,6) (Wo 6 ist die erste Spalte, die nicht gefroren ist)

+0

IronMan84 verwenden: I ersten 5 Spalten in meinem Excel-Header einfrieren möchten und ich schreibe den Code unten: xlWorkSheet.View.FreezePanes (1, 6); Anstatt 5 Spalten nur für die erste Zeile einzufrieren, werden 5 Spalten für alle Zeilen eingefroren. Irgendeine Idee, wie ich mein gewünschtes Ergebnis erreichen kann ?? –

+0

IronMan84: Gibt es eine Möglichkeit, den Bereich zum Einfrieren von Zeilen und Spalten anzugeben, anstatt nur Anfangsindizes anzugeben? –

+0

Excel erlaubt es Ihnen nicht, Bereiche von Zellen einzufrieren, nur Spalten oder Zeilen entlang der oberen und linken Seiten der Tabelle. Sie können jedoch die Funktion Teilen verwenden, um das Arbeitsblatt in Abschnitte zu unterteilen, die mit Bildlaufleisten navigiert werden können. Weitere Informationen finden Sie unter http://classroom.synonym.com/freeze-selection-excel-11819.html. –

1

Ich erkennen, dass bei der Verwendung von @ Vorschlag von IronMan84, wenn Sie nur an der Zeile, aber nicht an der Spalte interessiert sind. Sie können

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

Das ist richtig. Wenn Sie versuchen, ihn auf Null zu setzen, meldet Excel einen Fehler, dass das Dokument beschädigt ist. Fügen Sie 2 zu beliebig vielen Zeilen und/oder Spalten hinzu, die Sie einfrieren möchten. – jocull

+0

Entschuldigung, das ist falsch - addiere ** 1 ** zur Anzahl der Zeilen/Spalten! – jocull