Quelqu'un connaît-il un moyen de verrouiller une ligne dans une feuille de calcul créée avec Apache POI 3.7 ? Par verrouillage, je veux dire que je veux que la ligne de titre des colonnes reste visible lorsque l'utilisateur fait défiler les lignes. La feuille de calcul que j'ai créée comportera 500 lignes et il serait avantageux que les noms des colonnes soient toujours visibles.
Réponses
Trop de publicités?Si vous avez besoin de geler une ligne particulière n'importe où dans la feuille, vous pouvez utiliser (Within org.apache.poi.ss.usermodel.Sheet
) (Disponible dans POI 3.7 également)
Sheet.createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow)
Dans votre cas, si vous souhaitez geler uniquement vos x premières lignes, alors la fonction int leftmostColumn, int topRow
sera supprimée et vous pourrez utiliser simplement
Sheet.createFreezePane(int colSplit, int rowSplit)
par exemple
sheet1.createFreezePane(0, 5); // this will freeze first five rows
Pour ce faire, vous pouvez créer un volet de gel comme suit :
workbook.getSheetAt(workbook.getActiveSheetIndex()).createFreezePane(0, 1);
Cela va geler la première rangée en place. Il existe une autre méthode avec plus d'options, alors consultez le site Web de la Commission européenne. API .
La seule chose à noter serait si vous utilisez des classeurs XSSF - il y a une mention d'une correction de bogue dans la version 3.8-beta3 qui a corrigé le comportement des volets de gel en utilisant des feuilles de calcul XSSF :
50884 - Les volets d'arrêt sur image XSSF et HSSF se comportent désormais de la même manière (poi-developers)
Je n'en connais pas les détails, mais cela vaudrait la peine de se renseigner si vous êtes dans ce cas.
Vous ne pouvez pas geler une rangée centrale sans que les rangées situées au-dessus d'elle soient également gelées.
Disons que vous avez 100 lignes et que votre ligne d'en-tête se trouve à la ligne 50. On pourrait s'attendre à ce que seule la ligne 50 soit verrouillée de sorte que, lors du défilement des lignes 1 à 49, tout défile vers le haut et que, lorsqu'on atteint la ligne 50, la 50e ligne défile vers le haut et y reste lorsque les lignes 51 à 100 défilent.
Mais il existe une solution de rechange. Ce que vous pouvez faire, c'est regrouper les lignes et ensuite les geler.
Tout d'abord, regroupez les rangées de 1 à 49, puis figez les panneaux de 1 à 50. Maintenant l'utilisateur peut minimiser le groupe et ensuite travailler avec le tableau avec l'en-tête du tableau verrouillé et en haut.
sheet.groupRow(0, 49);
sheet.createFreezePane(0, 50);
Il y a cependant un petit problème. MS Excel ne vous laissera pas développer/réduire un groupe si la feuille est protégée. Pour cela, vous devez écrire une macro.