Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Das genaue Anpassen eines Bildes an eine einzelne Zelle ist eine häufige Anforderung beim Erstellen von Tabellenkalkulationen, die als visuelle Berichte, Produktkataloge, Mitarbeiterverzeichnisse, Dashboards oder Bestandslisten dienen. Anstatt ein Bild über mehrere Zellen zu strecken oder es auf einem Arbeitsblatt frei zu platzieren, benötigen Sie möglicherweise ein sauberes, an eine Zelle gebundenes Bild, das an der besitzenden Zelle ausgerichtet bleibt. Aspose.Cells unterstützt dieses Szenario auf zwei sich ergänzende Arten:
Picture hinzu, legen Sie seine Platzierung mit picture.setPlacement(PlacementType.MoveAndSize) fest und passen Sie die Ankerzellen über picture.setUpperLeftRow(), picture.setUpperLeftColumn(), picture.setLowerRightRow() und picture.setLowerRightColumn() so an, dass das Bild genau eine Zelle abdeckt.Buffer mit den Bilddaten über cell.setEmbeddedImage(imageBuffer) zu. Das Bild wird automatisch so skaliert, dass es in den Anzeigebereich der Zelle passt, und bleibt an die Zelle gebunden.
Im Folgenden werden beide Ansätze erläutert, die relevanten APIs erklärt und ihre Verwendung im Code gezeigt.Ein schwebendes Bild ist ein Picture-Objekt, das auf der Zeichnungsebene des Arbeitsblatts angezeigt wird. Obwohl es keiner einzelnen Zelle zugeordnet ist, ist es an einen Zellbereich verankert. Die Ankerzellen des Bildes — seine obere linke und untere rechte Ecke — bestimmen seine sichtbare Ausdehnung auf dem Arbeitsblatt. Standardmäßig erstreckt sich ein frisch hinzugefügtes Bild über mehrere Zellen.
Damit ein schwebendes Bild genau eine Zelle abdeckt, müssen Sie Folgendes tun:
worksheet.getPictures().add(row, column, imageBuffer) hinzu, wobei imageBuffer ein Buffer mit den Bilddaten ist. Dadurch wird das neue Bild an der angegebenen Zelle verankert.picture.setPlacement(PlacementType.MoveAndSize) auf, damit sich das Bild zusammen mit der zugrunde liegenden Zelle bewegt und seine Größe ändert, wenn der Benutzer die Spaltenbreite oder Zeilenhöhe ändert.Der Anker des Bildes wird durch vier nullbasierte Indexwerte definiert:
picture.getUpperLeftRow() und picture.setUpperLeftRow(value) — der Zeilenindex der Oberkante des Bildes.picture.getUpperLeftColumn() und picture.setUpperLeftColumn(value) — der Spaltenindex der linken Kante des Bildes.picture.getLowerRightRow() und picture.setLowerRightRow(value) — der Zeilenindex der Unterkante des Bildes. Um die Unterkante des Bildes am unteren Rand der Zeile r auszurichten, setzen Sie diesen Wert auf r + 1.picture.getLowerRightColumn() und picture.setLowerRightColumn(value) — der Spaltenindex der rechten Kante des Bildes. Um die rechte Kante des Bildes am rechten Rand der Spalte c auszurichten, setzen Sie diesen Wert auf c + 1.picture.getPlacement() und picture.setPlacement(value) verwenden den Aufzählungstyp PlacementType, um zu steuern, wie sich das Bild verhält, wenn der Benutzer die Größe der darunterliegenden Zeile oder Spalte ändert. Der empfohlene Wert für ein Bild in einer einzelnen Zelle ist PlacementType.MoveAndSize. Dadurch werden Position und Größe des Bildes gemeinsam mit der zugrunde liegenden Zelle angepasst, sodass die exakte Anpassung erhalten bleibt.
Workbook oder öffnen Sie eine vorhandene.workbook.getWorksheets().getAt(0) auf das Ziel-Arbeitsblatt Worksheet zu.fs.readFileSync von der Festplatte in einen Buffer ein.worksheet.getPictures().add(5, 2, imageBuffer) auf, um ein an die Zelle C6 verankertes Bild hinzuzufügen. Die Methode gibt den Index des neuen Bildes in der Pictures-Sammlung zurück; verwenden Sie diesen Index, um das entsprechende Picture abzurufen.picture.setUpperLeftRow(5), picture.setUpperLeftColumn(2), picture.setLowerRightRow(6) und picture.setLowerRightColumn(3).picture.setPlacement(PlacementType.MoveAndSize) auf, damit das Bild an C6 ausgerichtet bleibt, wenn die Größe der Spalte oder Zeile geändert wird..xlsx-Datei auf der Festplatte.
Der folgende Code veranschaulicht den vollständigen Ansatz.<!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 stellt außerdem einen einfacheren Mechanismus für zellengebundene Bilder bereit: die Methode cell.setEmbeddedImage(imageBuffer). Mit dieser Methode werden Bilddaten direkt der Zelle zugeordnet, als wäre das Bild Inline-Inhalt.
cell.setEmbeddedImage(imageBuffer) die kürzeste Variante, wenn Sie lediglich ein Bild in dieser Zelle einfügen möchten.Workbook oder öffnen Sie eine vorhandene.workbook.getWorksheets().getAt(0) auf das Ziel-Arbeitsblatt Worksheet zu.fs.readFileSync von der Festplatte in einen Buffer ein.worksheet.getCells().get("C6") oder worksheet.getCells().get(5, 2).Buffer mithilfe von cell.setEmbeddedImage(imageBuffer) an die Zelle..xlsx-Datei auf der Festplatte.
Der folgende Code veranschaulicht den vollständigen Ansatz.<!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);
// Zelle C6 abrufen
const cell = worksheet.cells.get("C6");
// Bilddatei in ein Byte-Array einlesen
const imageData = new Uint8Array(await fileInput.files[0].arrayBuffer());
// Bild direkt in die Zelle einbetten
cell.embeddedImage = imageData;
// Optional die Zeilenhöhe und Spaltenbreite anpassen, damit das eingebettete Bild besser sichtbar ist
worksheet.cells.setColumnWidth(2, 30); // Spalte C (Index 2)
worksheet.cells.setRowHeight(5, 100); // Zeile 6 (Index 5)
// Resultierende Arbeitsmappe als .xlsx-Datei speichern
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>
Beide Ansätze führen zu einem Bild, das in eine einzelne Zelle passt, unterscheiden sich jedoch hinsichtlich der Speicherung und des Verhaltens des Bildes:
worksheet.getPictures() abgerufenen Pictures-Sammlung arbeitet.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.