1+ using System ;
2+
3+ namespace Openize . Cells
4+ {
5+ /// <summary>
6+ /// Provides extension methods for easy management of freeze panes in Excel worksheets.
7+ /// </summary>
8+ public static class WorksheetFreezePaneExtensions
9+ {
10+ /// <summary>
11+ /// Freezes the top row of the worksheet.
12+ /// </summary>
13+ /// <param name="worksheet">The worksheet.</param>
14+ /// <returns>The worksheet for method chaining.</returns>
15+ /// <exception cref="ArgumentNullException">Thrown when worksheet is null.</exception>
16+ public static Worksheet FreezeTopRow ( this Worksheet worksheet )
17+ {
18+ if ( worksheet == null )
19+ throw new ArgumentNullException ( nameof ( worksheet ) ) ;
20+
21+ worksheet . FreezePane ( 1 , 0 ) ;
22+ return worksheet ;
23+ }
24+
25+ /// <summary>
26+ /// Freezes the first column of the worksheet.
27+ /// </summary>
28+ /// <param name="worksheet">The worksheet.</param>
29+ /// <returns>The worksheet for method chaining.</returns>
30+ /// <exception cref="ArgumentNullException">Thrown when worksheet is null.</exception>
31+ public static Worksheet FreezeFirstColumn ( this Worksheet worksheet )
32+ {
33+ if ( worksheet == null )
34+ throw new ArgumentNullException ( nameof ( worksheet ) ) ;
35+
36+ worksheet . FreezePane ( 0 , 1 ) ;
37+ return worksheet ;
38+ }
39+
40+ /// <summary>
41+ /// Freezes both the top row and first column of the worksheet.
42+ /// </summary>
43+ /// <param name="worksheet">The worksheet.</param>
44+ /// <returns>The worksheet for method chaining.</returns>
45+ /// <exception cref="ArgumentNullException">Thrown when worksheet is null.</exception>
46+ public static Worksheet FreezeTopRowAndFirstColumn ( this Worksheet worksheet )
47+ {
48+ if ( worksheet == null )
49+ throw new ArgumentNullException ( nameof ( worksheet ) ) ;
50+
51+ worksheet . FreezePane ( 1 , 1 ) ;
52+ return worksheet ;
53+ }
54+
55+ /// <summary>
56+ /// Freezes the specified number of top rows.
57+ /// </summary>
58+ /// <param name="worksheet">The worksheet.</param>
59+ /// <param name="rowCount">The number of rows to freeze.</param>
60+ /// <returns>The worksheet for method chaining.</returns>
61+ /// <exception cref="ArgumentNullException">Thrown when worksheet is null.</exception>
62+ /// <exception cref="ArgumentOutOfRangeException">Thrown when rowCount is negative.</exception>
63+ public static Worksheet FreezeTopRows ( this Worksheet worksheet , int rowCount )
64+ {
65+ if ( worksheet == null )
66+ throw new ArgumentNullException ( nameof ( worksheet ) ) ;
67+
68+ if ( rowCount < 0 )
69+ throw new ArgumentOutOfRangeException ( nameof ( rowCount ) , "Row count cannot be negative." ) ;
70+
71+ worksheet . FreezePane ( rowCount , 0 ) ;
72+ return worksheet ;
73+ }
74+
75+ /// <summary>
76+ /// Freezes the specified number of leftmost columns.
77+ /// </summary>
78+ /// <param name="worksheet">The worksheet.</param>
79+ /// <param name="columnCount">The number of columns to freeze.</param>
80+ /// <returns>The worksheet for method chaining.</returns>
81+ /// <exception cref="ArgumentNullException">Thrown when worksheet is null.</exception>
82+ /// <exception cref="ArgumentOutOfRangeException">Thrown when columnCount is negative.</exception>
83+ public static Worksheet FreezeLeftColumns ( this Worksheet worksheet , int columnCount )
84+ {
85+ if ( worksheet == null )
86+ throw new ArgumentNullException ( nameof ( worksheet ) ) ;
87+
88+ if ( columnCount < 0 )
89+ throw new ArgumentOutOfRangeException ( nameof ( columnCount ) , "Column count cannot be negative." ) ;
90+
91+ worksheet . FreezePane ( 0 , columnCount ) ;
92+ return worksheet ;
93+ }
94+
95+ /// <summary>
96+ /// Freezes the panes at a specified cell position, freezing all rows above and all columns to the left of the cell.
97+ /// </summary>
98+ /// <param name="worksheet">The worksheet.</param>
99+ /// <param name="cellReference">The cell reference (e.g., "B3") indicating the position for the freeze pane.</param>
100+ /// <returns>The worksheet for method chaining.</returns>
101+ /// <exception cref="ArgumentNullException">Thrown when worksheet or cellReference is null.</exception>
102+ /// <exception cref="FormatException">Thrown when cellReference format is invalid.</exception>
103+ public static Worksheet FreezePanesAt ( this Worksheet worksheet , string cellReference )
104+ {
105+ if ( worksheet == null )
106+ throw new ArgumentNullException ( nameof ( worksheet ) ) ;
107+
108+ if ( string . IsNullOrEmpty ( cellReference ) )
109+ throw new ArgumentNullException ( nameof ( cellReference ) ) ;
110+
111+ // Parse cell reference to get row and column
112+ var match = System . Text . RegularExpressions . Regex . Match ( cellReference , @"([A-Z]+)(\d+)" ) ;
113+ if ( ! match . Success )
114+ throw new FormatException ( $ "Invalid cell reference format: { cellReference } ") ;
115+
116+ string columnPart = match . Groups [ 1 ] . Value ;
117+ int rowNumber = int . Parse ( match . Groups [ 2 ] . Value ) ;
118+
119+ // Convert column letter to column number
120+ int columnNumber = 0 ;
121+ foreach ( char c in columnPart )
122+ {
123+ columnNumber = columnNumber * 26 + ( c - 'A' + 1 ) ;
124+ }
125+
126+ // Freeze panes at the specified position
127+ worksheet . FreezePane ( rowNumber - 1 , columnNumber ) ;
128+ return worksheet ;
129+ }
130+
131+ /// <summary>
132+ /// Removes all freeze panes from the worksheet.
133+ /// </summary>
134+ /// <param name="worksheet">The worksheet.</param>
135+ /// <returns>The worksheet for method chaining.</returns>
136+ /// <exception cref="ArgumentNullException">Thrown when worksheet is null.</exception>
137+ public static Worksheet UnfreezePanes ( this Worksheet worksheet )
138+ {
139+ if ( worksheet == null )
140+ throw new ArgumentNullException ( nameof ( worksheet ) ) ;
141+
142+ worksheet . FreezePane ( 0 , 0 ) ;
143+ return worksheet ;
144+ }
145+ }
146+ }
0 commit comments