Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
L’ajustement exact d’une image à une seule cellule est une exigence courante lors de la conception de tableurs qui servent de rapports visuels, de catalogues de produits, d’annuaires du personnel, de tableaux de bord ou de listes d’inventaire. Au lieu d’étirer une image sur plusieurs cellules ou de la placer librement sur une feuille de calcul, vous pouvez vouloir une image nette, liée à la cellule et qui reste alignée sur la cellule qui la contient. Aspose.Cells prend en charge ce scénario de deux façons complémentaires :
Picture à la feuille de calcul, définissez son placement à l’aide de picture.setPlacement(PlacementType.MoveAndSize) et ajustez ses cellules d’ancrage au moyen de picture.setUpperLeftRow(), picture.setUpperLeftColumn(), picture.setLowerRightRow() et picture.setLowerRightColumn() afin que l’image recouvre exactement une seule cellule.Buffer contenant les données de l’image avec cell.setEmbeddedImage(imageBuffer). L’image s’adapte automatiquement à la zone d’affichage de la cellule et se déplace avec elle.
La suite de cet article présente les deux approches, explique les API pertinentes et montre comment les utiliser dans le code.Une image flottante est un objet Picture qui se trouve sur la couche de dessin de la feuille de calcul. Bien qu’elle ne fasse pas partie d’une cellule en particulier, 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 couvre plusieurs cellules.
Pour faire couvrir exactement une seule cellule à une image flottante, vous devez :
worksheet.getPictures().add(row, column, imageBuffer), où imageBuffer est un Buffer contenant les données de l’image. Cette opération ancre la nouvelle image à la cellule indiquée.picture.setPlacement(PlacementType.MoveAndSize) afin 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.L’ancrage de l’image est défini par quatre accesseurs d’index commençant à zéro :
picture.getUpperLeftRow() et picture.setUpperLeftRow(value) — l’index de ligne du bord supérieur de l’image.picture.getUpperLeftColumn() et picture.setUpperLeftColumn(value) — l’index de colonne du bord gauche de l’image.picture.getLowerRightRow() et picture.setLowerRightRow(value) — l’index de ligne du bord inférieur de l’image. Pour placer le bord inférieur de l’image au bas de la ligne r, définissez cette valeur à r + 1.picture.getLowerRightColumn() et picture.setLowerRightColumn(value) — l’index de colonne du bord droit de l’image. Pour placer le bord droit de l’image à droite de la colonne c, définissez cette valeur à c + 1.picture.getPlacement() et picture.setPlacement(value) utilisent l’enum PlacementType pour contrôler 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 occupant une seule cellule est PlacementType.MoveAndSize, qui oblige l’image à se déplacer et à se redimensionner avec la cellule sous-jacente, tout en conservant son ajustement exact.
Workbook (ou ouvrez-en un existant).Worksheet cible via workbook.getWorksheets().getAt(0).Buffer, par exemple à l’aide de Node.js fs.readFileSync.worksheet.getPictures().add(5, 2, imageBuffer) pour ajouter une image ancrée à la cellule C6. La méthode renvoie l’index de la nouvelle image dans la collection Pictures ; utilisez-le pour récupérer le Picture correspondant.picture.setUpperLeftRow(5), picture.setUpperLeftColumn(2), picture.setLowerRightRow(6) et picture.setLowerRightColumn(3).picture.setPlacement(PlacementType.MoveAndSize) pour maintenir l’image alignée sur C6 lorsque la colonne ou la ligne est redimensionnée..xlsx.
Le code suivant illustre l’approche complète.<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example</h1>
<input type="file" id="fileInput" accept=".png,image/png" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: ["arial.ttf", "NotoSansSC-Regular.ttf"]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const file = fileInput.files[0];
if (!file) {
document.getElementById('result').innerHTML =
'<p style="color: red;">Please select a PNG image.</p>';
return;
}
const workbook = new Workbook();
const worksheet = workbook.worksheets.get(0);
const imageData = new Uint8Array(await file.arrayBuffer());
const picIndex = worksheet.pictures.add(5, 2, imageData);
const picture = worksheet.pictures.get(picIndex);
picture.upperLeftRow = 5;
picture.upperLeftColumn = 2;
picture.lowerRightRow = 6;
picture.lowerRightColumn = 3;
picture.placement = AsposeCells.Drawing.PlacementType.MoveAndSize;
const outputData = workbook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = "output.xlsx";
downloadLink.style.display = "block";
document.getElementById('result').innerHTML =
'<p style="color: green;">Done! Click the download link to get the result file.</p>';
});
</script>
</html>
Aspose.Cells expose également un mécanisme plus simple pour les images liées à une cellule : la méthode cell.setEmbeddedImage(imageBuffer). L’affectation de données d’image à l’aide de cette méthode rattache l’image à la cellule elle-même, comme s’il s’agissait de contenu en ligne.
cell.setEmbeddedImage(imageBuffer) constitue l’option la plus concise lorsque votre objectif est simplement d’obtenir « une image qui réside dans cette cellule ».Workbook (ou ouvrez-en un existant).Worksheet cible via workbook.getWorksheets().getAt(0).Buffer, par exemple à l’aide de Node.js fs.readFileSync.worksheet.getCells().get("C6"), soit via worksheet.getCells().get(5, 2).Buffer à la cellule avec cell.setEmbeddedImage(imageBuffer)..xlsx.
Le code suivant illustre l’approche complète.<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example</h1>
<input type="file" id="fileInput" accept=".png,.jpg,.jpeg" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook } = AsposeCells;
const asposeReady = AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: ["arial.ttf", "NotoSansSC-Regular.ttf"]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const downloadLink = document.getElementById('downloadLink');
const result = document.getElementById('result');
if (!fileInput.files || fileInput.files.length === 0) {
result.innerHTML = '<p style="color: red;">Please select an image file.</p>';
return;
}
const workbook = new Workbook();
const worksheet = workbook.worksheets.get(0);
// Obtenir la cellule cible C6
const cell = worksheet.cells.get("C6");
// Lire le fichier image dans un tableau d'octets
const imageData = new Uint8Array(await fileInput.files[0].arrayBuffer());
// Intégrer directement l'image dans la cellule
cell.embeddedImage = imageData;
// Ajuster éventuellement la hauteur de ligne et la largeur de colonne afin que l'image intégrée soit plus visible
worksheet.cells.setColumnWidth(2, 30); // Colonne C (index 2)
worksheet.cells.setRowHeight(5, 100); // Ligne 6 (index 5)
// Enregistrer le classeur obtenu dans un fichier .xlsx
const outputData = workbook.save(AsposeCells.SaveFormat.Xlsx);
const blob = new Blob([outputData]);
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = "output.xlsx";
downloadLink.style.display = "block";
result.innerHTML = '<p style="color: green;">Done! Click the download link to get the result file.</p>';
});
</script>
</html>
Les deux approches permettent d’obtenir une image ajustée à une seule cellule, mais elles diffèrent par le mode de stockage de l’image et son comportement :
Pictures accessible via worksheet.getPictures().Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.