Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Aspose.Cells propose deux méthodes distinctes pour associer une image à une seule cellule. Une image flottante est une forme située sur le calque de dessin de la feuille de calcul qui recouvre visuellement une plage de cellules, tandis qu’une image incorporée est stockée à l’intérieur de la cellule elle-même et s’adapte automatiquement à la zone d’affichage de la cellule. Choisissez l’approche qui correspond le mieux à vos exigences de mise en page.
Ajuster précisément une image à 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 obtenir une image nette, liée à la cellule, qui reste alignée avec la cellule à laquelle elle appartient. Aspose.Cells prend en charge ce scénario de deux manières complémentaires :
Picture à la feuille de calcul, définissez son setPlacement sur MOVE_AND_SIZE, puis ajustez ses cellules d’ancrage (setUpperLeftRow, setUpperLeftColumn, setLowerRightRow, setLowerRightColumn) afin que l’image couvre exactement une cellule.setEmbeddedImage de la cellule. L’image s’adapte automatiquement à la zone d’affichage de la cellule et se déplace avec elle.
La suite de cet article détaille les deux approches, explique les API concernées et montre comment les utiliser en code.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 individuelle, 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 nouvellement ajoutée s’étend sur plusieurs cellules.
Pour qu’une image flottante couvre exactement une seule cellule, vous devez :
Worksheet.getPictures().add(int row, int column, InputStream stream), qui ancre la nouvelle image à la cellule indiquée.Picture.setPlacement sur PlacementType.MOVE_AND_SIZE afin que l’image se déplace et se redimensionne avec la cellule sous-jacente lorsque l’utilisateur modifie la largeur de la colonne ou la hauteur de la ligne.L’ancrage de l’image est défini par quatre propriétés d’index de base zéro :
setUpperLeftRow — l’index de la ligne du bord supérieur de l’image.setUpperLeftColumn — l’index de la colonne du bord gauche de l’image.setLowerRightRow — l’index de la ligne du bord inférieur de l’image. Pour que le bord inférieur de l’image se trouve au bas de la ligne r, définissez cette valeur sur r + 1.setLowerRightColumn — l’index de la colonne du bord droit de l’image. Pour que le bord droit de l’image se trouve à droite de la colonne c, définissez cette valeur sur c + 1.Les index de lignes et de colonnes dans Aspose.Cells sont de base zéro. La cellule C6 a pour index de ligne 5 et pour index de colonne 2. Les erreurs de décalage d’une unité sur l’ancrage inférieur droit sont la source la plus fréquente d’images qui semblent empiéter sur une cellule adjacente.
getPlacement 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 dans une seule cellule est PlacementType.MOVE_AND_SIZE, qui provoque le déplacement et le redimensionnement simultanés de l’image avec sa cellule sous-jacente, en préservant l’ajustement exact.
Workbook (ou ouvrez-en un existant).Worksheet cible via workbook.getWorksheets().get(0).InputStream (généralement un FileInputStream) afin que le flux soit correctement fermé.worksheet.getPictures().add(5, 2, stream) pour ajouter une image ancrée à la cellule C6. Récupérez la référence Picture renvoyée.setUpperLeftRow(5), setUpperLeftColumn(2), setLowerRightRow(6), setLowerRightColumn(3).picture.setPlacement(PlacementType.MOVE_AND_SIZE) pour maintenir l’image alignée avec C6 lors du redimensionnement de la colonne ou de la ligne..xlsx.
Le code suivant illustre l’approche complète.import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook
from asposecells.api import Workbook, SaveFormat, PlacementType
workbook = Workbook()
worksheet = workbook.getWorksheets().get(0)
FileInputStream = jpype.JClass("java.io.FileInputStream")
fs = FileInputStream("logo.png")
try:
picIndex = worksheet.getPictures().add(5, 2, fs)
picture = worksheet.getPictures().get(picIndex)
picture.setUpperLeftRow(5)
picture.setUpperLeftColumn(2)
picture.setLowerRightRow(6)
picture.setLowerRightColumn(3)
picture.setPlacement(PlacementType.MoveAndSize)
finally:
fs.close()
workbook.save("output.xlsx", SaveFormat.Xlsx)
jpype.shutdownJVM()
Aspose.Cells expose également un mécanisme plus simple pour les images liées à une cellule : la propriété Cell.setEmbeddedImage. Affecter 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.
Cell.setEmbeddedImage l’option la plus concise lorsque votre objectif est simplement « une image qui réside à l’intérieur de cette cellule ».Workbook (ou ouvrez-en un existant).Worksheet cible via workbook.getWorksheets().get(0).byte[] (par exemple, en utilisant un appel Files.readAllBytes depuis java.nio.file.Files).worksheet.getCells().get("C6"), soit via worksheet.getCells().get(5, 2).setEmbeddedImage de la cellule..xlsx.
Le code suivant illustre l’approche complète.import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook, SaveFormat
workbook = Workbook()
worksheet = workbook.getWorksheets().get(0)
# Get the target cell C6
cell = worksheet.getCells().get("C6")
# Read the image file into a byte array
imageData = open("logo.png", "rb").read()
# Embed the image directly into the cell
cell.setEmbeddedImage(imageData)
# Optionally adjust row height and column width so the embedded image is more visible
worksheet.getCells().setColumnWidth(2, 30) # Column C (index 2)
worksheet.getCells().setRowHeight(5, 100) # Row 6 (index 5)
# Save the resulting workbook as an .xlsx file
workbook.save("output.xlsx", SaveFormat.Xlsx)
jpype.shutdownJVM()
Les deux approches produisent une image qui s’ajuste à l’intérieur d’une seule cellule, mais elles diffèrent par la manière dont l’image est stockée et dont elle se comporte :
PictureCollection.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.