Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Aspose.Cells erbjuder två distinkta sätt att associera en bild med en enda cell. En flytande bild är en form på kalkylbladets ritlager som visuellt överläggs ett cellintervall, medan en inbäddad bild lagras inuti själva cellen och skalas automatiskt till cellens visningsområde. Välj det tillvägagångssätt som bäst matchar dina layoutkrav.
Att passa in en bild exakt i en enda cell är ett vanligt krav vid design av kalkylblad som fungerar som visuella rapporter, produktkataloger, personalregister, instrumentpaneler eller inventarielistor. Istä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 ren, cellbunden bild som håller sig justerad med den cell som äger den. Aspose.Cells stödjer detta scenario på två kompletterande sätt:
Picture i kalkylbladet, ställ in dess Placement till MOVE_AND_SIZE och justera dess förankringsceller (getUpperLeftRow, getUpperLeftColumn, getLowerRightRow, getLowerRightColumn) så att bilden täcker exakt en cell.getEmbeddedImage()-setter. Bilden skalas automatiskt för att passa cellens visningsområde och följer med cellen.
Resten av denna artikel går igenom båda tillvägagångssätten, förklarar de relevanta API:erna och visar hur de används i kod.En flytande bild är ett Picture-objekt som finns på kalkylbladets ritlager. Även om den inte är en del av någon enskild cell är den förankrad till ett cellintervall. Bildens förankringsceller — dess övre vänstra och nedre högra hörn — avgör dess visuella omfattning på kalkylbladet. Som standard spänner en nyligen tillagd bild över flera celler.
För att få en flytande bild att täcka exakt en cell behöver du:
Worksheet.getPictures().add(int row, int column, InputStream stream), vilket förankrar den nya bilden till den givna cellen.Picture.setPlacement() till PlacementType.MOVE_AND_SIZE så att bilden flyttas och ändras i storlek tillsammans med den underliggande cellen när användaren ändrar kolumnbredden eller radhöjden.Bildens förankring definieras av fyra nollbaserade indexegenskaper:
Picture.getUpperLeftRow() — radindex för bildens övre kant.Picture.getUpperLeftColumn() — kolumnindex för bildens vänstra kant.Picture.getLowerRightRow() — radindex för bildens nedre kant. För att bildens nedre kant ska hamna längst ner på rad r, ställ in detta till r + 1.Picture.getLowerRightColumn() — kolumnindex för bildens högra kant. För att bildens högra kant ska hamna till höger om kolumn c, ställ in detta till c + 1.Rad- och kolumnindex i Aspose.Cells är nollbaserade. Cell C6 har radindex 5 och kolumnindex 2. Off-by-one-fel på den nedre högra förankringen är den vanligaste källan till bilder som ser ut att överlappa in i en intilliggande cell.
Picture.getPlacement() returnerar en enum av typen PlacementType som styr hur bilden beter sig när användaren ändrar storlek på raden eller kolumnen under den. Det rekommenderade värdet för en encellsbild är PlacementType.MOVE_AND_SIZE, vilket gör att bilden flyttas och ändras i storlek tillsammans med sin underliggande cell, vilket bevarar den exakta passformen.
Workbook (eller öppna en befintlig).Worksheet från workbook.getWorksheets().get(0).InputStream (till exempel en FileInputStream) med ett try-with-resources-block så att strömmen stängs korrekt.worksheet.getPictures().add(5, 2, stream) för att lägga till en bild förankrad till cell C6. Fånga 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 med C6 när kolumnen eller raden ändras i storlek..xlsx-fil.
Följande kod demonstrerar det kompletta tillvägagångssättet.import com.aspose.cells.*;
import java.io.FileInputStream;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
try (FileInputStream fs = new FileInputStream("logo.png"))
{
int picIndex = worksheet.getPictures().add(5, 2, fs);
Picture picture = worksheet.getPictures().get(picIndex);
picture.setUpperLeftRow(5);
picture.setUpperLeftColumn(2);
picture.setLowerRightRow(6);
picture.setLowerRightColumn(3);
picture.setPlacement(PlacementType.MOVE_AND_SIZE);
}
workbook.save("output.xlsx", SaveFormat.XLSX);
Aspose.Cells exponerar också en enklare mekanism för cellbundna bilder: metoden Cell.setEmbeddedImage(byte[]). Att tilldela bildbytes till denna egenskap bifogar bilden till själva cellen, som om den vore inline-innehåll.
setEmbeddedImage() till det mest koncisa alternativet när ditt mål helt enkelt är “en bild som lever inuti den här cellen”.Workbook (eller öppna en befintlig).Worksheet från workbook.getWorksheets().get(0).byte[]-array (till exempel genom att läsa filen via Files.readAllBytes() från java.nio.file).worksheet.getCells().get("C6") eller worksheet.getCells().get(5, 2).cell.setEmbeddedImage(bytes)..xlsx-fil.
Följande kod demonstrerar det kompletta tillvägagångssättet.import com.aspose.cells.*;
import java.nio.file.Files;
import java.nio.file.Paths;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
// Hämta målcellen C6
Cell cell = worksheet.getCells().get("C6");
// Läs bildfilen till en byte-array
byte[] imageData = Files.readAllBytes(Paths.get("logo.png"));
// Bädda in bilden direkt i cellen
cell.setEmbeddedImage(imageData);
// Justera eventuellt radhöjd och kolumnbredd så att den inbäddade bilden syns bättre
worksheet.getCells().setColumnWidth(2, 30); // Kolumn C (index 2)
worksheet.getCells().setRowHeight(5, 100); // Rad 6 (index 5)
// Spara den resulterande arbetsboken som en .xlsx-fil
workbook.save("output.xlsx", SaveFormat.XLSX);
Båda tillvägagångssätten producerar en bild som passar inuti en enda cell, men de skiljer sig åt i hur bilden lagras och hur den beter sig:
PictureCollection.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.