Congélation des colonnes dans EPPlus (une fonction Excel split)
J'ai beaucoup travaillé avec EPPlus pour générer des fichiers Excel pour le nombre d'exportations que mon projet me demande de faire. La plupart des exportations qu'ils veulent ont tendance à correspondre parfaitement aux exportations qu'ils ont déjà dans leur système d'héritage. L'un d'eux, cependant, ils veulent différents. Ils veulent qu'il ressemble exactement à l'une des exportations du système hérité Après avoir effectué des modifications typiques et spécifiques .
Certains des modifications qu'ils font, cependant, chaque ligne beaucoup plus longtemps qu'ils ne le souhaitent, ils veulent donc garder certaines informations de colonne verrouillées sur l'écran tandis que le reste des colonnes peut être défilé comme d'habitude (c'est-à-dire la fonction split D'Excel). J'ai essayé de verrouiller les colonnes avec ws.Column(6).Style.Locked = true
, mais cela ne semble pas fonctionner. J'ai également essayé de définir la propriété Locked
d'une plage de cellules sur true, mais cela n'a pas non plus fonctionné.
Comment puis-je geler les colonnes en place?
2 réponses
Il s'avère Qu'EPPlus a une fonction intégrée pour le faire sur l'objet Worksheet
lui-même appelé FreezePanes
. Cette fonction a 2 paramètres, qui sont tous deux int
: Row et Column. Cela gèlera les lignes ou les colonnes que vous souhaitez avoir verrouillées lors de l'affichage de la feuille de calcul.
L'un des exemples sur le site EPPlus l'utilise, bien que ce ne soit pas l'objectif principal de l'exemple/ cet exemple peut être trouvé ici.
Il y a un gotcha avec cette fonction que vous devriez savoir, cependant: le nombre que vous utilisez pour le paramètre row ou column est en fait la première colonne qui est Pas figée en place. En d'autres termes, si vous voulez que les 5 premières colonnes soient gelées, vous devrez effectuer l'appel suivant:
ws.View.FreezePanes(1,6)
(Où 6 est la première colonne qui n'est pas gelé)
J'ai réalisé que lorsque vous utilisez la suggestion de @IronMan84, si vous êtes seulement intéressé par la ligne mais pas la colonne. Vous pouvez utiliser
ws.View.FreezePanes(3, 1); // (Freeze Row 2 and no column)