Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Att anpassa en bild exakt till en enskild cell är ett vanligt krav när man utformar kalkylblad som används som visuella rapporter, produktkataloger, personalkataloger, instrumentpaneler eller inventarielistor. I stället för att sträcka ut en bild över många celler eller placera den löst på ett kalkylblad kanske du vill ha en tydligt avgränsad bild som hålls justerad i förhållande till den cell den är knuten till. Aspose.Cells stöder det här scenariot på två kompletterande sätt:
Picture i kalkylbladet, ange setPlacement som MOVE_AND_SIZE och justera förankringscellerna (setUpperLeftRow, setUpperLeftColumn, setLowerRightRow, setLowerRightColumn) så att bilden täcker exakt en cell.setEmbeddedImage-egenskap. Bilden skalas automatiskt för att passa cellens visningsområde och följer med cellen.
Resten av den här artikeln går igenom båda metoderna, beskriver de relevanta API:erna och visar hur de används i kod.En flytande bild är ett Picture-objekt som finns i kalkylbladets ritlager. Även om bilden inte är en del av någon enskild cell är den förankrad i ett cellintervall. Bildens förankringsceller – dess övre vänstra och nedre högra hörn – bestämmer bildens visuella utsträckning på kalkylbladet. Som standard sträcker sig en nyligen tillagd bild över flera celler.
För att en flytande bild ska täcka exakt en cell måste du:
Worksheet.getPictures().add(int row, int column, InputStream stream), vilket förankrar den nya bilden vid den angivna cellen.Picture.setPlacement som PlacementType.MOVE_AND_SIZE så att bilden flyttas och storleksanpassas tillsammans med den underliggande cellen när användaren ändrar kolumnbredden eller radhöjden.Bildens förankring definieras av fyra egenskaper med nollbaserade index:
setUpperLeftRow — radindexet för bildens övre kant.setUpperLeftColumn — kolumnindexet för bildens vänstra kant.setLowerRightRow — radindexet för bildens nedre kant. För att bildens nedre kant ska ligga vid underkanten av rad r ska värdet anges som r + 1.setLowerRightColumn — kolumnindexet för bildens högra kant. För att bildens högra kant ska ligga vid högra kanten av kolumn c ska värdet anges som c + 1.Rad- och kolumnindex i Aspose.Cells är nollbaserade. Cell C6 har radindex 5 och kolumnindex 2. Off-by-one-fel i det nedre högra ankaret är den vanligaste orsaken till bilder som ser ut att överlappa en intilliggande cell.
getPlacement är en uppräkning av typen PlacementType som styr hur bilden beter sig när användaren ändrar storlek på den underliggande raden eller kolumnen. Det rekommenderade värdet för en bild i en enda cell är PlacementType.MOVE_AND_SIZE, vilket innebär att bilden flyttas och storleksanpassas tillsammans med den underliggande cellen så att den exakta anpassningen bibehålls.
Workbook (eller öppna en befintlig arbetsbok).Worksheet från workbook.getWorksheets().get(0).InputStream (vanligtvis en FileInputStream) så att strömmen stängs korrekt.worksheet.getPictures().add(5, 2, stream) för att lägga till en bild förankrad vid cell C6. Spara den returnerade Picture-referensen.setUpperLeftRow(5), setUpperLeftColumn(2), setLowerRightRow(6), setLowerRightColumn(3).picture.setPlacement(PlacementType.MOVE_AND_SIZE) för att hålla bilden justerad i förhållande till C6 när kolumnbredden eller radhöjden ändras..xlsx-fil.
Följande kod visar hela tillvägagångssättet.import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook
from asposecells.api import Workbook, SaveFormat, PlacementType
workbook = Workbook()
worksheet = workbook.getWorksheets().get(0)
FileInputStream = jpype.JClass("java.io.FileInputStream")
fs = FileInputStream("logo.png")
try:
picIndex = worksheet.getPictures().add(5, 2, fs)
picture = worksheet.getPictures().get(picIndex)
picture.setUpperLeftRow(5)
picture.setUpperLeftColumn(2)
picture.setLowerRightRow(6)
picture.setLowerRightColumn(3)
picture.setPlacement(PlacementType.MoveAndSize)
finally:
fs.close()
workbook.save("output.xlsx", SaveFormat.Xlsx)
jpype.shutdownJVM()
Aspose.Cells tillhandahåller även en enklare mekanism för cellbundna bilder: egenskapen Cell.setEmbeddedImage. Att tilldela bilddata i form av en bytearray till den här egenskapen kopplar bilden till själva cellen, som om den vore inlineinnehåll.
Cell.setEmbeddedImage till det mest koncisa alternativet när målet helt enkelt är ”en bild som finns inuti den här cellen”.Workbook (eller öppna en befintlig arbetsbok).Worksheet från workbook.getWorksheets().get(0).byte[]-array (till exempel med ett anrop till Files.readAllBytes i java.nio.file.Files).worksheet.getCells().get("C6") eller worksheet.getCells().get(5, 2).setEmbeddedImage-egenskap..xlsx-fil.
Följande kod visar hela tillvägagångssättet.import jpype
import asposecells
jpype.startJVM()
from asposecells.api import Workbook, SaveFormat
workbook = Workbook()
worksheet = workbook.getWorksheets().get(0)
# Get the target cell C6
cell = worksheet.getCells().get("C6")
# Read the image file into a byte array
imageData = open("logo.png", "rb").read()
# Embed the image directly into the cell
cell.setEmbeddedImage(imageData)
# Optionally adjust row height and column width so the embedded image is more visible
worksheet.getCells().setColumnWidth(2, 30) # Column C (index 2)
worksheet.getCells().setRowHeight(5, 100) # Row 6 (index 5)
# Save the resulting workbook as an .xlsx file
workbook.save("output.xlsx", SaveFormat.Xlsx)
jpype.shutdownJVM()
Båda metoderna skapar en bild som anpassas till en enskild cell, men de skiljer sig åt när det gäller hur bilden lagras och beter sig:
PictureCollection.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.