web-dev-qa-db-fra.com

Gel des colonnes dans EPPlus (une fonction de fractionnement Excel)

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 souhaitent tendent à correspondre parfaitement aux exportations qu'ils ont déjà dans leur ancien système. L'un d'eux, cependant, ils veulent différent. 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.

Cependant, certaines des modifications effectuées allongent chaque ligne beaucoup plus longtemps qu'elles ne le souhaitent, de sorte qu'elles souhaitent conserver certaines des informations sur les colonnes verrouillées à l'écran tandis que le reste des colonnes peut défiler normalement. (c'est-à-dire la fonction de division 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 fonctionné non plus.

Comment puis-je figer les colonnes en place?

34
Corey Adler

Il s'avère que 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, les deux étant int: Row et Column. Cette opération gèle toutes les lignes ou colonnes que vous souhaitez verrouiller lors de l'affichage de la feuille de calcul.

L'un des exemples sur le site Web EPPlus l'utilise, bien que ce ne soit pas l'objectif principal de l'exemple/Cet exemple peut être trouvé ici .

Il y a cependant un problème avec cette fonction que vous devez connaître: le nombre que vous utilisez pour le paramètre de ligne ou de colonne est en fait la première colonne qui est [~ # ~ ] pas [~ # ~] figé sur place. En d'autres termes, si vous souhaitez 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 figée)

62
Corey Adler

J'ai réalisé qu'en utilisant la suggestion de @ IronMan84, si vous êtes uniquement intéressé par la ligne mais pas la colonne. Vous pouvez utiliser

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