Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Att passa in en bild exakt i en enda cell är ett vanligt krav när man utformar kalkylblad som fungerar som visuella rapporter, produktkataloger, personalkataloger, dashboards 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 inriktad med cellen som äger den. Aspose.Cells stöder detta scenario på två kompletterande sätt:
Picture i kalkylbladet, ange dess Placement till MoveAndSize, och justera dess ankarceller (UpperLeftRow, UpperLeftColumn, LowerRightRow, LowerRightColumn) så att bilden täcker exakt en cell.EmbeddedImage-egenskap. Bilden skalas automatiskt för att passa cellens visningsyta och följer med cellen.
Resten av den här artikeln går igenom båda metoderna, förklarar de relevanta API:erna och visar hur man använder dem i kod.En flytande bild är ett Picture-objekt som finns på kalkylbladets ritlager. Även om det inte är en del av någon enskild cell är det förankrat till ett cellintervall. Bildens ankarceller — dess övre vänstra och nedre högra hörn — avgör dess visuella omfattning på kalkylbladet. Som standard sträcker sig en nyligen tillagd bild över flera celler.
För att få en flytande bild att täcka exakt en cell måste du:
worksheet.getPictures().add(int row, int column, InputStream stream), vilket förankrar den nya bilden till den angivna cellen.picture.setPlacement(PlacementType.MOVE_AND_SIZE) så att bilden flyttas och storleksändras med den underliggande cellen när användaren ändrar kolumnbredden eller radhöjden.Bildens ankare definieras av fyra nollbaserade indexegenskaper:
picture.setUpperLeftRow(int) — radindexet för bildens övre kant.picture.setUpperLeftColumn(int) — kolumnindexet för bildens vänstra kant.picture.setLowerRightRow(int) — radindexet för bildens nedre kant. För att få bildens nedre kant att sitta vid botten av rad r, ange detta till r + 1.picture.setLowerRightColumn(int) — kolumnindexet för bildens högra kant. För att få bildens högra kant att sitta vid höger om kolumn c, ange 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å det nedre högra ankaret är den vanligaste källan till bilder som verkar överlappa in i en intilliggande cell.
Picture.Placement är 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.MoveAndSize, vilket gör att bilden flyttas och storleksändras tillsammans med sin underliggande cell och bevarar den exakta passningen.
Workbook (eller öppna en befintlig).Worksheet från workbook.getWorksheets().get(0).InputStream (till exempel genom att använda FileInputStream) 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.UpperLeftRow = 5, UpperLeftColumn = 2, LowerRightRow = 6, LowerRightColumn = 3.picture.setPlacement(PlacementType.MOVE_AND_SIZE) för att hålla bilden inriktad med C6 när kolumnen eller raden storleksändras..xlsx-fil.
Följande kod demonstrerar det fullständiga tillvägagångssättet.const AsposeCells = require("aspose.cells-node");
var workbook = new AsposeCells.Workbook();
var worksheet = workbook.getWorksheets().get(0);
var picIndex = worksheet.getPictures().add(5, 2, "logo.png");
var 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);
Aspose.Cells exponerar också en enklare mekanism för cellbundna bilder, egenskapen Cell.EmbeddedImage. Genom att tilldela bildbytes till den här egenskapen bifogas bilden till själva cellen, som om den vore inline-innehåll.
Cell.EmbeddedImage till det mest kortfattade 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).Files.readAllBytes från java.nio.file.Files).worksheet.getCells().get("C6") eller worksheet.getCells().get(5, 2).EmbeddedImage-egenskap via cell.setEmbeddedImage(bytes)..xlsx-fil.
Följande kod demonstrerar det fullständiga tillvägagångssättet.const AsposeCells = require("aspose.cells-node");
const fs = require("fs");
var workbook = new AsposeCells.Workbook();
var worksheet = workbook.getWorksheets().get(0);
// Hämta målcellen C6
var cell = worksheet.getCells().get("C6");
// Läs bildfilen till en byte-array
var imageData = fs.readFileSync("logo.png");
// Bädda in bilden direkt i cellen
cell.setEmbeddedImage(imageData);
// Justera valfritt 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", AsposeCells.SaveFormat.Xlsx);
Båda metoderna 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.