Einfügen eines Bildes in eine Zelle
Einführung
Das exakte Anpassen eines Bildes an eine einzelne Zelle ist eine häufige Anforderung beim Entwerfen von Tabellenkalkulationen, die als visuelle Berichte, Produktkataloge, Mitarbeiterverzeichnisse, Dashboards oder Bestandslisten dienen. Anstatt ein Bild über viele Zellen zu strecken oder es lose auf einem Arbeitsblatt zu platzieren, möchten Sie möglicherweise ein sauberes, zellgebundenes Bild, das mit der ihm gehörenden Zelle ausgerichtet bleibt.
Aspose.Cells unterstützt dieses Szenario auf zwei sich ergänzende Arten:
- Ansatz 1 — Platzieren eines schwebenden Bildes über einer Zelle. Fügen Sie ein
Picturezum Arbeitsblatt hinzu, setzen Sie dessenPlacementaufMoveAndSizeund passen Sie die 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 Bild-Bytes der Eigenschaft
EmbeddedImageder Zelle zu. Das Bild skaliert automatisch, um in den Anzeigebereich der Zelle zu passen, und wandert mit der Zelle mit.
Der Rest dieses Artikels führt durch beide Ansätze, erläutert 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 auf der Zeichnungsebene des Arbeitsblatts lebt. 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:
- Das Bild mit
Worksheet.Pictures.Add(int row, int column, Stream stream)hinzufügen, wodurch das neue Bild an die angegebene Zelle verankert wird. - Die vier Ankereigenschaften so setzen, dass das Begrenzungsrechteck des Bildes mit der Zielzelle übereinstimmt.
Picture.PlacementaufPlacementType.MoveAndSizesetzen, damit das Bild zusammen mit der darunterliegenden Zelle verschoben und in der Größe verändert wird, wenn der Benutzer die Spaltenbreite oder Zeilenhöhe ändert.
Verankern 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 beispielsweise das Bild genau in die Zelle C6 (Zeilenindex 5, Spaltenindex 2) einzupassen, setzen Sie UpperLeftRow = 5, UpperLeftColumn = 2, LowerRightRow = 6 und LowerRightColumn = 3.
Steuern 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 einzelnes Zellbild ist PlacementType.MoveAndSize, wodurch das Bild zusammen mit seiner darunterliegenden Zelle verschoben und in der Größe verändert wird, wobei die exakte Anpassung erhalten bleibt.
Schritt-für-Schritt-Anleitung
- Erstellen Sie eine neue
Workbook(oder öffnen Sie eine vorhandene). - Greifen Sie auf das Ziel-
Worksheetüberworkbook.Worksheets[0]zu. - Öffnen Sie die Bilddatei von der Festplatte in einen
FileStreammithilfe einesusing-Blocks, sodass der Stream ordnungsgemäß freigegeben wird. - Rufen Sie
worksheet.Pictures.Add(5, 2, stream)auf, um ein an Zelle C6 verankertes Bild hinzuzufügen. Speichern Sie die zurückgegebenePicture-Referenz. - Setzen Sie die vier Ankerkoordinaten so, dass das Bild nur die Zelle C6 abdeckt:
UpperLeftRow = 5,UpperLeftColumn = 2,LowerRightRow = 6,LowerRightColumn = 3. - Setzen Sie
picture.Placement = PlacementType.MoveAndSize, damit das Bild mit C6 ausgerichtet bleibt, wenn die Spalte oder Zeile in der Größe verändert wird. - 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.
using System;
using System.IO;
using Aspose.Cells;
using Aspose.Cells.Drawing;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
using (FileStream fs = new FileStream("logo.png", FileMode.Open, FileAccess.Read))
{
int picIndex = worksheet.Pictures.Add(5, 2, fs);
Picture picture = worksheet.Pictures[picIndex];
picture.UpperLeftRow = 5;
picture.UpperLeftColumn = 2;
picture.LowerRightRow = 6;
picture.LowerRightColumn = 3;
picture.Placement = PlacementType.MoveAndSize;
}
workbook.Save("output.xlsx", 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 skaliert automatisch, 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 von Formeln referenziert, als Teil einer Zeile sortiert oder in anderen zellbezogenen Operationen verwendet werden kann.
Dies macht Cell.EmbeddedImage zur kompaktesten 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 auf das Ziel-
Worksheetüberworkbook.Worksheets[0]zu. - Lesen Sie die Bilddatei von der Festplatte in ein
byte[]-Array (zum Beispiel mitFile.ReadAllBytes). - 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 Zielreihe 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 Workbook();
var worksheet = workbook.Worksheets[0];
// Zielzelle C6 abrufen
var cell = worksheet.Cells["C6"];
// Bilddatei in ein Byte-Array einlesen
byte[] imageData = File.ReadAllBytes("logo.png");
// Bild direkt in die Zelle einbetten
cell.EmbeddedImage = imageData;
// Optional 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)
// Die resultierende Arbeitsmappe als .xlsx-Datei speichern
workbook.Save("output.xlsx", 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 Steuerung der Platzierung, der Schichtung oder der 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
PictureCollectionarbeitet. - Sie Ankerkoordinaten dynamisch basierend auf dem Arbeitsblattlayout berechnen müssen.
-
Verwenden Sie ein eingebettetes Bild (Ansatz 2), wenn:
- Sie das einfachstmögliche Einfügen eines Bildes in eine Zelle wünschen.
- Das Bild mit der Zelle wie jeder andere Zelleninhalt mitwandern soll.
- Sie das Bild nicht als Form manipulieren müssen.
Verwandte Artikel
- How to Insert Picture in Cell
- How to Fit Image to Cell Width and Height
- Add Image Hyperlinks
- Load a Web Image from a URL into an Excel Worksheet
- Manipulate Position Size and Designer Chart