Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
L’adattamento esatto di un’immagine a una singola cella è un requisito comune quando si progettano fogli di calcolo che fungono da report visivi, cataloghi di prodotti, elenchi dipendenti, dashboard o elenchi di inventario. Invece di estendere un’immagine su molte celle o di collocarla in modo approssimativo su un foglio di lavoro, potrebbe essere necessaria un’immagine pulita e associata a una cella, che rimanga allineata alla cella proprietaria. Aspose.Cells supporta questo scenario in due modi complementari:
Picture al foglio di lavoro, impostarne il posizionamento con picture.setPlacement(PlacementType.MoveAndSize) e regolare le celle di ancoraggio mediante picture.setUpperLeftRow(), picture.setUpperLeftColumn(), picture.setLowerRightRow() e picture.setLowerRightColumn(), in modo che l’immagine copra esattamente una cella.Buffer contenente i dati dell’immagine con cell.setEmbeddedImage(imageBuffer). L’immagine viene ridimensionata automaticamente per adattarsi all’area di visualizzazione della cella e la accompany nella cella.
Il resto di questo articolo descrive entrambi gli approcci, spiega le API pertinenti e mostra come usarle nel codice.Un’immagine flottante è un oggetto Picture che si trova nel livello di disegno del foglio di lavoro. Sebbene non faccia parte di alcuna singola cella, è ancorato a un intervallo di celle. Le celle di ancoraggio dell’immagine — gli angoli superiore sinistro e inferiore destro — ne determinano l’estensione visiva nel foglio di lavoro. Per impostazione predefinita, un’immagine appena aggiunta si estende su più celle.
affinché un’immagine flottante copra esattamente una cella, è necessario:
worksheet.getPictures().add(row, column, imageBuffer), dove imageBuffer è un Buffer contenente i dati dell’immagine. La nuova immagine viene ancorata alla cella specificata.picture.setPlacement(PlacementType.MoveAndSize) in modo che l’immagine si sposti e venga ridimensionata con la cella sottostante quando l’utente modifica la larghezza della colonna o l’altezza della riga.L’ancoraggio dell’immagine è definito da quattro accessor con indice a base zero:
picture.getUpperLeftRow() e picture.setUpperLeftRow(value) — l’indice di riga del bordo superiore dell’immagine.picture.getUpperLeftColumn() e picture.setUpperLeftColumn(value) — l’indice di colonna del bordo sinistro dell’immagine.picture.getLowerRightRow() e picture.setLowerRightRow(value) — l’indice di riga del bordo inferiore dell’immagine. Per posizionare il bordo inferiore dell’immagine nella parte inferiore della riga r, impostare questo valore su r + 1.picture.getLowerRightColumn() e picture.setLowerRightColumn(value) — l’indice di colonna del bordo destro dell’immagine. Per posizionare il bordo destro dell’immagine nella parte destra della colonna c, impostare questo valore su c + 1.picture.getPlacement() e picture.setPlacement(value) usano il tipo enumerato PlacementType per controllare il comportamento dell’immagine quando l’utente ridimensiona la riga o la colonna sottostante. Il valore consigliato per un’immagine in una singola cella è PlacementType.MoveAndSize, che fa sì che l’immagine si sposti e venga ridimensionata insieme alla cella sottostante, preservandone l’adattamento esatto.
Workbook (o aprirne uno esistente).Worksheet di destinazione tramite workbook.getWorksheets().getAt(0).Buffer, ad esempio usando Node.js fs.readFileSync.worksheet.getPictures().add(5, 2, imageBuffer) per aggiungere un’immagine ancorata alla cella C6. Il metodo restituisce l’indice della nuova immagine nella raccolta Pictures; utilizzarlo per recuperare il corrispondente oggetto Picture.picture.setUpperLeftRow(5), picture.setUpperLeftColumn(2), picture.setLowerRightRow(6) e picture.setLowerRightColumn(3).picture.setPlacement(PlacementType.MoveAndSize) per mantenere l’immagine allineata a C6 quando la colonna o la riga viene ridimensionata..xlsx.
Il codice seguente dimostra l’approccio completo.<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example</h1>
<input type="file" id="fileInput" accept=".png,image/png" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: ["arial.ttf", "NotoSansSC-Regular.ttf"]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const file = fileInput.files[0];
if (!file) {
document.getElementById('result').innerHTML =
'<p style="color: red;">Please select a PNG image.</p>';
return;
}
const workbook = new Workbook();
const worksheet = workbook.worksheets.get(0);
const imageData = new Uint8Array(await file.arrayBuffer());
const picIndex = worksheet.pictures.add(5, 2, imageData);
const picture = worksheet.pictures.get(picIndex);
picture.upperLeftRow = 5;
picture.upperLeftColumn = 2;
picture.lowerRightRow = 6;
picture.lowerRightColumn = 3;
picture.placement = AsposeCells.Drawing.PlacementType.MoveAndSize;
const outputData = workbook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = "output.xlsx";
downloadLink.style.display = "block";
document.getElementById('result').innerHTML =
'<p style="color: green;">Done! Click the download link to get the result file.</p>';
});
</script>
</html>
Aspose.Cells espone inoltre un meccanismo più semplice per le immagini associate alle celle: il metodo cell.setEmbeddedImage(imageBuffer). L’assegnazione dei dati dell’immagine mediante questo metodo associa l’immagine alla cella stessa, come se fosse un contenuto in linea.
cell.setEmbeddedImage(imageBuffer) l’opzione più concisa quando l’obiettivo è semplicemente «un’immagine che risiede all’interno di questa cella».Workbook (o aprirne uno esistente).Worksheet di destinazione tramite workbook.getWorksheets().getAt(0).Buffer, ad esempio usando Node.js fs.readFileSync.worksheet.getCells().get("C6") oppure worksheet.getCells().get(5, 2).Buffer alla cella con cell.setEmbeddedImage(imageBuffer)..xlsx.
Il codice seguente dimostra l’approccio completo.<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example</h1>
<input type="file" id="fileInput" accept=".png,.jpg,.jpeg" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook } = AsposeCells;
const asposeReady = AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: ["arial.ttf", "NotoSansSC-Regular.ttf"]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const downloadLink = document.getElementById('downloadLink');
const result = document.getElementById('result');
if (!fileInput.files || fileInput.files.length === 0) {
result.innerHTML = '<p style="color: red;">Please select an image file.</p>';
return;
}
const workbook = new Workbook();
const worksheet = workbook.worksheets.get(0);
// Ottenere la cella di destinazione C6
const cell = worksheet.cells.get("C6");
// Leggere il file immagine in un array di byte
const imageData = new Uint8Array(await fileInput.files[0].arrayBuffer());
// Incorporare l'immagine direttamente nella cella
cell.embeddedImage = imageData;
// Se desiderato, regolare l'altezza della riga e la larghezza della colonna per rendere l'immagine incorporata più visibile
worksheet.cells.setColumnWidth(2, 30); // Colonna C (indice 2)
worksheet.cells.setRowHeight(5, 100); // Riga 6 (indice 5)
// Salvare la cartella di lavoro risultante come file .xlsx
const outputData = workbook.save(AsposeCells.SaveFormat.Xlsx);
const blob = new Blob([outputData]);
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = "output.xlsx";
downloadLink.style.display = "block";
result.innerHTML = '<p style="color: green;">Done! Click the download link to get the result file.</p>';
});
</script>
</html>
Entrambi gli approcci producono un’immagine adattata a una singola cella, ma differiscono nel modo in cui l’immagine viene memorizzata e nel suo comportamento:
Pictures accessed tramite worksheet.getPictures().Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.