Filas de encabezado de bloqueo de puntos de interés de Apache


82

¿Alguien está familiarizado con una forma de bloquear una fila en una hoja de cálculo creada con Apache POI 3.7? Al bloquear me refiero a que quiero que la fila de título de las columnas permanezca visible cuando el usuario se desplaza por las filas. Mi hoja de cálculo creada tendrá 500 filas y sería beneficioso que los nombres de las columnas estuvieran siempre visibles.


2
POI 3.7 es un poco antiguo ahora, ¿hay alguna razón por la que no esté utilizando la última versión?
Gagravarr

2
Sí, eso es lo que autorizó mi empleador.

Respuestas:


128

En caso de que necesite congelar una fila en particular en cualquier lugar de la hoja, puede usar (Dentro org.apache.poi.ss.usermodel.Sheet) (también disponible en POI 3.7)

Sheet.createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow)

En su caso, si desea congelar solo sus primeras x filas, la int leftmostColumn, int topRowsección se eliminará y puede usar solo

Sheet.createFreezePane(int colSplit, int rowSplit)

por ejemplo

sheet1.createFreezePane(0, 5); // this will freeze first five rows

Solo quiero congelar mi primera columna y el número de fila # 17, por favor sugiéreme cómo lograrlo. Gracias por adelantado.
Ashish Burnwal

17

Para hacer esto, puede crear un panel congelado de la siguiente manera:

workbook.getSheetAt(workbook.getActiveSheetIndex()).createFreezePane(0, 1);

Esto congelará la primera fila en su lugar. Hay otro método con más opciones, así que echa un vistazo a la API .

Lo único a tener en cuenta sería si está utilizando libros de trabajo XSSF; se menciona una corrección de errores en la versión 3.8-beta3 que corrigió el comportamiento de los paneles congelados usando hojas de cálculo XSSF:

50884 - Los paneles de congelación XSSF y HSSF ahora se comportan de la misma manera (desarrolladores de poi)

No conozco los detalles de esto, pero valdría la pena investigar si estás en ese barco.


1

No puede congelar una fila del medio sin que las filas de arriba también se congelen.

Supongamos que tiene 100 filas y su fila de encabezado está en la línea 50. Puede esperar que solo la fila 50 se bloquee, de modo que cuando se desplaza desde la línea 1-49, todo se desplaza hacia arriba y cuando llega a la línea 50, la fila 50 se desplaza hasta la arriba y permanece allí cuando se desplazan las líneas 51-100.

Pero hay una solución. Lo que puede hacer es agrupar las filas y luego congelarlas.

Primero, agrupe las filas del 1 al 49 y luego congele los paneles del 1 al 50. Ahora el usuario puede minimizar el grupo y luego trabajar con la tabla con el encabezado de la tabla bloqueado y en la parte superior.

sheet.groupRow(0, 49);
sheet.createFreezePane(0, 50);

Sin embargo, hay una pequeña trampa. MS Excel no le permitirá expandir / contraer un grupo si la hoja está protegida. Para ello, necesita escribir una macro.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.