Einfügen eines Bildes in eine Zelle
Einführung
Das genaue Anpassen eines Bildes an eine einzelne Zelle ist eine häufige Anforderung beim Entwerfen von Tabellenkalkulationen, die als visuelle Berichte, Produktkataloge, Mitarbeiterverzeichnisse, Dashboards oder Inventarlisten dienen. Anstatt ein Bild über viele Zellen zu spannen oder es lose auf einem Arbeitsblatt zu platzieren, möchten Sie möglicherweise ein sauberes, zellgebundenes Bild, das mit der Zelle, der es gehört, ausgerichtet bleibt.
Aspose.Cells unterstützt dieses Szenario auf zwei komplementäre Arten:
- Ansatz 1 — Platzieren eines schwebenden Bildes über einer Zelle. Fügen Sie dem Arbeitsblatt ein
Picturehinzu, setzen Sie dessenplacementaufMoveAndSizeund passen Sie seine Ankerzellen (upperLeftRow,upperLeftColumn,lowerRightRow,lowerRightColumn) so an, dass das Bild genau eine Zelle abdeckt. - Ansatz 2 — Direktes Einbetten eines Bildes in eine Zelle. Weisen Sie der Eigenschaft
embeddedImageder Zelle Bild-Bytes zu. Das Bild wird automatisch skaliert, um in den Anzeigebereich der Zelle zu passen, und bewegt sich mit der Zelle mit.
Der Rest dieses Artikels führt durch beide Ansätze, erklärt die relevanten APIs und zeigt, wie sie im Code verwendet werden.
Ansatz 1: Platzieren eines Bildes über einer Zelle
Ein schwebendes Bild ist ein Picture-Objekt, das sich auf der Zeichnungsebene des Arbeitsblatts befindet. Obwohl es nicht Teil einer einzelnen Zelle ist, ist es an einen Zellbereich verankert. Die Ankerzellen des Bildes — seine obere linke und untere rechte Ecke — bestimmen seine visuelle Ausdehnung auf dem Arbeitsblatt. Standardmäßig erstreckt sich ein neu hinzugefügtes Bild über mehrere Zellen.
Um ein schwebendes Bild genau eine Zelle abdecken zu lassen, müssen Sie:
- Fügen Sie das Bild mit
worksheet.pictures.add(row, column, stream)hinzu, wodurch das neue Bild an die angegebene Zelle verankert wird. - Legen Sie die vier Anker-Eigenschaften so fest, dass das umgebende Rechteck des Bildes mit der Zielzelle übereinstimmt.
- Setzen Sie
picture.placementaufPlacementType.MoveAndSize, damit sich das Bild mit der darunterliegenden Zelle mitbewegt und in der Größe anpasst, wenn der Benutzer die Spaltenbreite oder Zeilenhöhe ändert.
Verankerung des Bildes an einer einzelnen Zelle
Der Anker des Bildes wird durch vier nullbasierte Indexeigenschaften definiert:
picture.upperLeftRow— der Zeilenindex der oberen Kante des Bildes.picture.upperLeftColumn— der Spaltenindex der linken Kante des Bildes.picture.lowerRightRow— der Zeilenindex der unteren Kante des Bildes. Damit die untere Kante des Bildes am unteren Rand der Zeilersitzt, setzen Sie diesen aufr + 1.picture.lowerRightColumn— der Spaltenindex der rechten Kante des Bildes. Damit die rechte Kante des Bildes am rechten Rand der Spaltecsitzt, setzen Sie diesen aufc + 1.
Um das Bild beispielsweise genau in die Zelle C6 (Zeilenindex 5, Spaltenindex 2) einzupassen, setzen Sie upperLeftRow = 5, upperLeftColumn = 2, lowerRightRow = 6 und lowerRightColumn = 3.
Steuerung des Platzierungsverhaltens
picture.placement ist eine Aufzählung vom Typ PlacementType, die steuert, wie sich das Bild verhält, wenn der Benutzer die darunterliegende Zeile oder Spalte in der Größe ändert. Der empfohlene Wert für ein Bild in einer einzelnen Zelle ist PlacementType.MoveAndSize, wodurch sich das Bild zusammen mit seiner darunterliegenden Zelle bewegt und in der Größe anpasst, sodass die exakte Anpassung erhalten bleibt.
Schritt-für-Schritt-Anleitung
- Erstellen Sie eine neue
Workbook(oder öffnen Sie eine vorhandene). - Greifen Sie über
workbook.worksheets[0]auf das Ziel-Worksheetzu. - Öffnen Sie die Bilddatei von der Festplatte in einen Stream und stellen Sie sicher, dass der Stream nach der Verwendung ordnungsgemäß geschlossen wird.
- Rufen Sie
worksheet.pictures.add(5, 2, stream)auf, um ein an Zelle C6 verankertes Bild hinzuzufügen. Erfassen Sie die zurückgegebenePicture-Referenz. - Legen Sie die vier Ankerkoordinaten so fest, dass das Bild nur Zelle C6 abdeckt:
upperLeftRow = 5,upperLeftColumn = 2,lowerRightRow = 6,lowerRightColumn = 3. - Setzen Sie
picture.placement = PlacementType.MoveAndSize, damit das Bild bei Größenänderungen der Spalte oder Zeile an C6 ausgerichtet bleibt. - Optional können Sie Beispieltext in umliegende Zellen einfügen, um zu zeigen, dass nur Zelle C6 das Bild enthält.
- Speichern Sie die Arbeitsmappe als
.xlsx-Datei auf der Festplatte.
Der folgende Code demonstriert den vollständigen Ansatz.
const AsposeCells = require("aspose.cells");
const fs = require("fs");
const workbook = new AsposeCells.Workbook();
const worksheet = workbook.getWorksheets().get(0);
const fs_stream = fs.createReadStream("logo.png");
const picIndex = worksheet.getPictures().add(5, 2, fs_stream);
const picture = worksheet.getPictures().get(picIndex);
picture.setUpperLeftRow(5);
picture.setUpperLeftColumn(2);
picture.setLowerRightRow(6);
picture.setLowerRightColumn(3);
picture.setPlacement(AsposeCells.PlacementType.MoveAndSize);
workbook.save("output.xlsx", AsposeCells.SaveFormat.Xlsx);
Ansatz 2: Direktes Einbetten eines Bildes in eine Zelle
Aspose.Cells bietet auch einen einfacheren Mechanismus für zellgebundene Bilder: die Eigenschaft cell.embeddedImage. Durch Zuweisen von Bild-Bytes zu dieser Eigenschaft wird das Bild an die Zelle selbst angehängt, als wäre es Inline-Inhalt.
Wie eingebettete Bilder funktionieren
- Das Bild wird als Teil des Zellinhalts gespeichert, nicht als Form auf der Zeichnungsebene.
- Das Bild wird automatisch skaliert, um in die gerenderten Grenzen der Zelle zu passen. Es sind keine Ankerkoordinaten oder Platzierungseinstellungen erforderlich.
- Die Zelle bleibt eine echte Zelle mit einer echten Adresse, die durch Formeln referenziert, als Teil einer Zeile sortiert oder in anderen Operationen auf Zellebene verwendet werden kann.
Dies macht cell.embeddedImage zur prägnantesten Option, wenn Ihr Ziel einfach „ein Bild, das in dieser Zelle lebt" ist.
Schritt-für-Schritt-Anleitung
- Erstellen Sie eine neue
Workbook(oder öffnen Sie eine vorhandene). - Greifen Sie über
workbook.worksheets[0]auf das Ziel-Worksheetzu. - Lesen Sie die Bilddatei von der Festplatte in einen Buffer oder ein Byte-Array mit Node.js-Dateisystem-APIs (zum Beispiel
fs.readFileSync). - Holen Sie sich eine Referenz auf die Zielzelle — entweder über
worksheet.cells["C6"]oderworksheet.cells[5, 2]. - Weisen Sie das Byte-Array der Eigenschaft
embeddedImageder Zelle zu. - Passen Sie optional die Zeilenhöhe und Spaltenbreite der Ziel-Zeile und -Spalte an, um dem eingebetteten Bild ein prominenteres Erscheinungsbild zu verleihen.
- Speichern Sie die Arbeitsmappe als
.xlsx-Datei auf der Festplatte.
Der folgende Code demonstriert den vollständigen Ansatz.
var workbook = new AsposeCells.Workbook();
var worksheet = workbook.getWorksheets().get(0);
// Holen Sie sich die Zielzelle C6
var cell = worksheet.getCells().get("C6");
// Lesen Sie die Bilddatei in ein Byte-Array ein
var imageData = fs.readFileSync("logo.png");
// Bettet das Bild direkt in die Zelle ein
cell.setEmbeddedImage(imageData);
// Optional kann die Zeilenhöhe und Spaltenbreite angepasst werden, damit das eingebettete Bild besser sichtbar ist
worksheet.getCells().setColumnWidth(2, 30); // Spalte C (Index 2)
worksheet.getCells().setRowHeight(5, 100); // Zeile 6 (Index 5)
// Speichern Sie die resultierende Arbeitsmappe als .xlsx-Datei
workbook.save("output.xlsx", AsposeCells.SaveFormat.Xlsx);
Den richtigen Ansatz wählen
Beide Ansätze erzeugen ein Bild, das in eine einzelne Zelle passt, unterscheiden sich jedoch darin, wie das Bild gespeichert wird und wie es sich verhält:
-
Verwenden Sie ein schwebendes Bild (Ansatz 1), wenn:
- Sie eine feinere Kontrolle über Platzierung, Schichtung oder Ausrichtung mit anderen Zeichnungsobjekten benötigen.
- Sie möchten, dass sich das Bild als Form verhält, die ausgewählt, neu angeordnet oder mit anderen Formen gruppiert werden kann.
- Sie Legacy-Kompatibilität mit Code benötigen, der bereits mit der Bildersammlung funktioniert.
- Sie Ankerkoordinaten dynamisch basierend auf dem Arbeitsblattlayout berechnen müssen.
-
Verwenden Sie ein eingebettetes Bild (Ansatz 2), wenn:
- Sie die einfachstmögliche Einfügung eines Bildes in eine Zelle wünschen.
- Das Bild sich wie jeder andere Zellinhalt mit der Zelle mitbewegen soll.
- Sie das Bild nicht als Form bearbeiten müssen.
Verwandte Artikel
- So fügen Sie ein Bild in eine Zelle ein
- Bild-Hyperlinks hinzufügen
- Laden eines Web-Bildes von einer URL in ein Excel-Arbeitsblatt
- Position, Größe und Designer-Diagramm bearbeiten