Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Aspose.Cells bietet zwei unterschiedliche Möglichkeiten, ein Bild einer einzelnen Zelle zuzuordnen. Ein schwebendes Bild ist eine Form auf der Zeichnungsebene des Arbeitsblatts, die einen Zellbereich visuell überlagert, während ein eingebettetes Bild in der Zelle selbst gespeichert wird und sich automatisch an den Anzeigebereich der Zelle anpasst. Wählen Sie den Ansatz, der Ihren Layout-Anforderungen am besten entspricht.
Ein Bild genau an eine einzelne Zelle anzupassen 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 strecken oder es lose auf einem Arbeitsblatt zu platzieren, möchten Sie möglicherweise ein sauberes, zellgebundenes Bild, das mit der zugehörigen Zelle ausgerichtet bleibt. Aspose.Cells unterstützt dieses Szenario auf zwei komplementäre Arten:
Picture zum Arbeitsblatt hinzu, setzen Sie dessen placement auf MOVE_AND_SIZE und passen Sie die Ankerzellen (upper_left_row, upper_left_column, lower_right_row, lower_right_column) so an, dass das Bild genau eine Zelle abdeckt.embedded_image der Zelle Bildbytes zu. Das Bild wird automatisch so skaliert, dass es in den Anzeigebereich der Zelle passt, und es wird mit der Zelle verschoben.
Der Rest dieses Artikels führt durch beide Ansätze, erläutert die relevanten APIs und zeigt, wie sie im Code verwendet werden.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 seinen visuellen Umfang auf dem Arbeitsblatt. Standardmäßig erstreckt sich ein neu hinzugefügtes Bild über mehrere Zellen.
Damit ein schwebendes Bild genau eine Zelle abdeckt, müssen Sie:
Worksheet.pictures.add(row, column, stream) hinzu, wodurch das neue Bild an die angegebene Zelle verankert wird.Picture.placement auf PlacementType.MOVE_AND_SIZE, damit sich das Bild mit der darunter liegenden Zelle bewegt und in der Größe ändert, wenn der Benutzer die Spaltenbreite oder Zeilenhöhe ändert.Der Anker des Bildes wird durch vier nullbasierte Indexeigenschaften definiert:
Picture.upper_left_row — der Zeilenindex der oberen Kante des Bildes.Picture.upper_left_column — der Spaltenindex der linken Kante des Bildes.Picture.lower_right_row — der Zeilenindex der unteren Kante des Bildes. Damit die untere Kante des Bildes am unteren Rand der Zeile r liegt, setzen Sie diesen auf r + 1.Picture.lower_right_column — der Spaltenindex der rechten Kante des Bildes. Damit die rechte Kante des Bildes am rechten Rand der Spalte c liegt, setzen Sie diesen auf c + 1.Zeilen- und Spaltenindizes in Aspose.Cells sind nullbasiert. Zelle C6 hat den Zeilenindex 5 und den Spaltenindex 2. Off-by-One-Fehler am unteren rechten Anker sind die häufigste Ursache für Bilder, die scheinbar in eine benachbarte Zelle überlappen.
Picture.placement ist eine Enumeration vom Typ PlacementType, die steuert, wie sich das Bild verhält, wenn der Benutzer die Zeile oder Spalte darunter in der Größe ändert. Der empfohlene Wert für ein Einzelzellbild ist PlacementType.MOVE_AND_SIZE, wodurch sich das Bild zusammen mit seiner darunter liegenden Zelle bewegt und in der Größe ändert, sodass die genaue Anpassung erhalten bleibt.
Workbook (oder öffnen Sie eine vorhandene).workbook.worksheets[0] auf das Ziel-Worksheet zu.BytesIO-Objekt) mithilfe eines with-Blocks, damit der Stream ordnungsgemäß freigegeben wird.worksheet.pictures.add(5, 2, stream) auf, um ein an Zelle C6 verankertes Bild hinzuzufügen. Erfassen Sie die zurückgegebene Picture-Referenz.upper_left_row = 5, upper_left_column = 2, lower_right_row = 6, lower_right_column = 3.picture.placement = PlacementType.MOVE_AND_SIZE, damit das Bild mit C6 ausgerichtet bleibt, wenn die Spalte oder Zeile in der Größe geändert wird..xlsx-Datei auf der Festplatte.
Der folgende Code demonstriert den vollständigen Ansatz.import aspose.cells as ac
workbook = ac.Workbook()
worksheet = workbook.worksheets[0]
with open("logo.png", "rb") as fs:
pic_index = worksheet.pictures.add(5, 2, fs)
picture = worksheet.pictures[pic_index]
picture.upper_left_row = 5
picture.upper_left_column = 2
picture.lower_right_row = 6
picture.lower_right_column = 3
picture.placement = ac.PlacementType.MOVE_AND_SIZE
workbook.save("output.xlsx", ac.SaveFormat.XLSX)
Aspose.Cells bietet auch einen einfacheren Mechanismus für zellgebundene Bilder: die Eigenschaft Cell.embedded_image. Durch Zuweisen von Bildbytes zu dieser Eigenschaft wird das Bild an die Zelle selbst angehängt, als wäre es Inline-Inhalt.
Cell.embedded_image die kompakteste Option, wenn Ihr Ziel einfach „ein Bild, das in dieser Zelle lebt" ist.Workbook (oder öffnen Sie eine vorhandene).workbook.worksheets[0] auf das Ziel-Worksheet zu.bytes-Objekt (zum Beispiel durch Öffnen der Datei im Binärmodus und Aufrufen von .read()).worksheet.cells["C6"] oder worksheet.cells[5, 2].embedded_image der Zelle zu..xlsx-Datei auf der Festplatte.
Der folgende Code demonstriert den vollständigen Ansatz.import aspose.cells as ac
workbook = ac.Workbook()
worksheet = workbook.worksheets[0]
# Get the target cell C6
cell = worksheet.cells["C6"]
# Read the image file into a byte array
with open("logo.png", "rb") as f:
imageData = f.read()
# Embed the image directly into the cell
cell.embedded_image = imageData
# Optionally adjust row height and column width so the embedded image is more visible
worksheet.cells.set_column_width(2, 30) # Column C (index 2)
worksheet.cells.set_row_height(5, 100) # Row 6 (index 5)
# Save the resulting workbook as an .xlsx file
workbook.save("output.xlsx", ac.SaveFormat.XLSX)
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:
pictures-Sammlungen funktioniert.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.