Insertion d'une image dans une cellule
Introduction
Ajuster une image exactement à la taille d’une seule cellule est une exigence courante lors de la conception de tableurs servant de rapports visuels, de catalogues de produits, d’annuaires d’employés, de tableaux de bord ou de listes d’inventaire. Plutôt que d’étirer une image sur plusieurs cellules ou de la placer de manière approximative sur une feuille de calcul, vous pouvez souhaiter une image nette, liée à la cellule, qui reste alignée avec la cellule qui la contient.
Aspose.Cells prend en charge ce scénario de deux manières complémentaires :
- Approche 1 — Placer une image flottante par-dessus une cellule. Ajoutez un
Pictureà la feuille de calcul, définissez sonplacementsurMOVE_AND_SIZE, et ajustez ses cellules d’ancrage (upper_left_row,upper_left_column,lower_right_row,lower_right_column) de sorte que l’image couvre exactement une cellule. - Approche 2 — Intégrer une image directement dans une cellule. Assignez les octets de l’image à la propriété
embedded_imagede la cellule. L’image se met automatiquement à l’échelle pour s’adapter à la zone d’affichage de la cellule et se déplace avec la cellule.
La suite de cet article présente les deux approches, explique les API concernées, et montre comment les utiliser dans le code.
Approche 1 : Placer une image par-dessus une cellule
Une image flottante est un objet Picture qui réside sur le calque de dessin de la feuille de calcul. Bien qu’elle ne fasse partie d’aucune cellule spécifique, elle est ancrée à une plage de cellules. Les cellules d’ancrage de l’image — ses coins supérieur gauche et inférieur droit — déterminent son étendue visuelle sur la feuille de calcul. Par défaut, une image fraîchement ajoutée s’étend sur plusieurs cellules.
Pour qu’une image flottante couvre exactement une cellule, vous devez :
- Ajouter l’image à l’aide de
Worksheet.pictures.add(row, column, stream), ce qui ancre la nouvelle image à la cellule indiquée. - Définir les quatre propriétés d’ancrage de sorte que le rectangle englobant de l’image coïncide avec la cellule cible.
- Définir
Picture.placementsurPlacementType.MOVE_AND_SIZEafin que l’image se déplace et se redimensionne avec la cellule sous-jacente lorsque l’utilisateur modifie la largeur de colonne ou la hauteur de ligne.
Ancrer l’image à une seule cellule
L’ancrage de l’image est défini par quatre propriétés d’index basées sur zéro :
Picture.upper_left_row— l’index de ligne du bord supérieur de l’image.Picture.upper_left_column— l’index de colonne du bord gauche de l’image.Picture.lower_right_row— l’index de ligne du bord inférieur de l’image. Pour que le bord inférieur de l’image se trouve au bas de la ligner, définissez cette valeur surr + 1.Picture.lower_right_column— l’index de colonne du bord droit de l’image. Pour que le bord droit de l’image se trouve à droite de la colonnec, définissez cette valeur surc + 1.
Par exemple, pour ajuster l’image exactement dans la cellule C6 (index de ligne 5, index de colonne 2), définissez upper_left_row = 5, upper_left_column = 2, lower_right_row = 6, et lower_right_column = 3.
Contrôler le comportement de placement
Picture.placement est une énumération de type PlacementType qui contrôle le comportement de l’image lorsque l’utilisateur redimensionne la ligne ou la colonne située en dessous. La valeur recommandée pour une image sur une seule cellule est PlacementType.MOVE_AND_SIZE, qui provoque le déplacement et le redimensionnement de l’image conjointement avec sa cellule sous-jacente, préservant ainsi l’ajustement exact.
Instructions étape par étape
- Créez un nouveau
Workbook(ou ouvrez un fichier existant). - Accédez à la
Worksheetcible viaworkbook.worksheets[0]. - Ouvrez le fichier image depuis le disque dans un flux de fichier (ou un objet
BytesIO) à l’aide d’un blocwithafin que le flux soit correctement libéré. - Appelez
worksheet.pictures.add(5, 2, stream)pour ajouter une image ancrée à la cellule C6. Capturez la référencePicturerenvoyée. - Définissez les quatre coordonnées d’ancrage de sorte que l’image ne couvre que la cellule C6 :
upper_left_row = 5,upper_left_column = 2,lower_right_row = 6,lower_right_column = 3. - Définissez
picture.placement = PlacementType.MOVE_AND_SIZEpour maintenir l’image alignée avec C6 lorsque la colonne ou la ligne est redimensionnée. - Ajoutez éventuellement du texte d’exemple dans les cellules environnantes pour démontrer que seule la cellule C6 contient l’image.
- Enregistrez le classeur sur le disque sous forme de fichier
.xlsx.
Le code suivant illustre l’approche complète.
import aspose.cells as ac
workbook = ac.Workbook()
worksheet = workbook.worksheets[0]
with open("logo.png", "rb") as fs:
pic_index = worksheet.pictures.add(5, 2, fs)
picture = worksheet.pictures[pic_index]
picture.upper_left_row = 5
picture.upper_left_column = 2
picture.lower_right_row = 6
picture.lower_right_column = 3
picture.placement = ac.PlacementType.MOVE_AND_SIZE
workbook.save("output.xlsx", ac.SaveFormat.XLSX)
Approche 2 : Intégrer une image directement dans une cellule
Aspose.Cells expose également un mécanisme plus simple pour les images liées à une cellule : la propriété Cell.embedded_image. Assigner des octets d’image à cette propriété attache l’image à la cellule elle-même, comme s’il s’agissait d’un contenu en ligne.
Comment fonctionnent les images intégrées
- L’image est stockée dans le contenu de la cellule plutôt que comme une forme sur le calque de dessin.
- L’image se met automatiquement à l’échelle pour s’adapter aux limites rendues de la cellule. Aucune coordonnée d’ancrage ni paramètre de placement n’est requis.
- La cellule reste une véritable cellule avec une véritable adresse qui peut être référencée par des formules, triée dans le cadre d’une ligne, ou utilisée dans d’autres opérations au niveau de la cellule.
Cela fait de Cell.embedded_image l’option la plus concise lorsque votre objectif est simplement « une image qui vit dans cette cellule ».
Instructions étape par étape
- Créez un nouveau
Workbook(ou ouvrez un fichier existant). - Accédez à la
Worksheetcible viaworkbook.worksheets[0]. - Lisez le fichier image depuis le disque dans un objet
bytes(par exemple, en ouvrant le fichier en mode binaire et en appelant.read()). - Obtenez une référence à la cellule cible — soit via
worksheet.cells["C6"], soit viaworksheet.cells[5, 2]. - Assignez l’objet
bytesà la propriétéembedded_imagede la cellule. - Ajustez éventuellement la hauteur de ligne et la largeur de colonne de la ligne et de la colonne cibles pour donner à l’image intégrée une apparence plus proéminente.
- Enregistrez le classeur sur le disque sous forme de fichier
.xlsx.
Le code suivant illustre l’approche complète.
import aspose.cells as ac
workbook = ac.Workbook()
worksheet = workbook.worksheets[0]
# Obtenir la cellule cible C6
cell = worksheet.cells["C6"]
# Lire le fichier image dans un tableau d'octets
with open("logo.png", "rb") as f:
imageData = f.read()
# Incorporer l'image directement dans la cellule
cell.embedded_image = imageData
# Ajuster éventuellement la hauteur de ligne et la largeur de colonne pour que l'image incorporée soit plus visible
worksheet.cells.set_column_width(2, 30) # Colonne C (index 2)
worksheet.cells.set_row_height(5, 100) # Ligne 6 (index 5)
# Enregistrer le classeur résultant en tant que fichier .xlsx
workbook.save("output.xlsx", ac.SaveFormat.XLSX)
Choisir la bonne approche
Les deux approches produisent une image qui s’adapte à une seule cellule, mais elles diffèrent par la manière dont l’image est stockée et dont elle se comporte :
-
Utilisez une image flottante (Approche 1) lorsque :
- Vous avez besoin d’un contrôle plus fin sur le placement, la superposition ou l’alignement avec d’autres objets de dessin.
- Vous souhaitez que l’image se comporte comme une forme pouvant être sélectionnée, réordonnée ou regroupée avec d’autres formes.
- Vous exigez une compatibilité ascendante avec du code qui fonctionne déjà avec les collections
pictures. - Vous devez calculer dynamiquement les coordonnées d’ancrage en fonction de la disposition de la feuille de calcul.
-
Utilisez une image intégrée (Approche 2) lorsque :
- Vous souhaitez l’insertion la plus simple possible d’une image dans une cellule.
- L’image doit se déplacer avec la cellule comme tout autre contenu de cellule.
- Vous n’avez pas besoin de manipuler l’image comme une forme.
Articles connexes
- Comment insérer une image dans une cellule
- Ajouter des hyperliens d’image
- Charger une image web à partir d’une URL dans une feuille de calcul Excel
- Manipuler la position, la taille et le graphique du concepteur