Inserimento di un'immagine in una cella
Introduzione
Adattare un’immagine esattamente a una singola cella è un requisito comune quando si progettano fogli di calcolo che fungono da report visivi, cataloghi di prodotti, rubriche del personale, dashboard o elenchi di inventario. Piuttosto che estendere un’immagine su molte celle o posizionarla in modo approssimativo su un foglio di lavoro, potresti voler avere un’immagine pulita, legata alla cella, che rimanga allineata con la cella che la possiede.
Aspose.Cells supporta questo scenario in due modi complementari:
- Approccio 1 — Posizionare un’immagine fluttuante sopra una cella. Aggiungi un oggetto
Pictureal foglio di lavoro, imposta il suoPlacementsuMoveAndSizee regola le celle di ancoraggio (UpperLeftRow,UpperLeftColumn,LowerRightRow,LowerRightColumn) in modo che l’immagine copra esattamente una cella. - Approccio 2 — Incorporare un’immagine direttamente in una cella. Assegna i byte dell’immagine alla proprietà
EmbeddedImagedella cella. L’immagine si ridimensiona automaticamente per adattarsi all’area di visualizzazione della cella e si sposta con essa.
Il resto di questo articolo illustra entrambi gli approcci, spiega le API rilevanti e mostra come utilizzarle nel codice.
Approccio 1: Posizionare un’immagine sopra una cella
Un’immagine fluttuante è un oggetto Picture che risiede sul livello di disegno del foglio di lavoro. Sebbene non faccia parte di alcuna singola cella, è ancorata a un intervallo di celle. Le celle di ancoraggio dell’immagine — i suoi angoli superiore sinistro e inferiore destro — ne determinano l’estensione visiva sul foglio di lavoro. Per impostazione predefinita, un’immagine appena aggiunta si estende su più celle.
Per fare in modo che un’immagine fluttuante copra esattamente una cella, devi:
- Aggiungere l’immagine utilizzando
Worksheet.Pictures.Add(int row, int column, Stream stream), che ancora la nuova immagine alla cella specificata. - Impostare le quattro proprietà di ancoraggio in modo che il rettangolo delimitatore dell’immagine coincida con la cella di destinazione.
- Impostare
Picture.PlacementsuPlacementType.MoveAndSizein modo che l’immagine si sposti e si ridimensioni con la cella sottostante quando l’utente modifica la larghezza della colonna o l’altezza della riga.
Ancoraggio dell’immagine a una singola cella
L’ancoraggio dell’immagine è definito da quattro proprietà di indice a base zero:
Picture.UpperLeftRow— l’indice di riga del bordo superiore dell’immagine.Picture.UpperLeftColumn— l’indice di colonna del bordo sinistro dell’immagine.Picture.LowerRightRow— l’indice di riga del bordo inferiore dell’immagine. Per fare in modo che il bordo inferiore dell’immagine si trovi in fondo alla rigar, imposta questo valore sur + 1.Picture.LowerRightColumn— l’indice di colonna del bordo destro dell’immagine. Per fare in modo che il bordo destro dell’immagine si trovi a destra della colonnac, imposta questo valore suc + 1.
Ad esempio, per adattare l’immagine esattamente alla cella C6 (indice di riga 5, indice di colonna 2), imposta UpperLeftRow = 5, UpperLeftColumn = 2, LowerRightRow = 6 e LowerRightColumn = 3.
Controllo del comportamento di posizionamento
Picture.Placement è un’enumerazione di tipo PlacementType che controlla come si comporta l’immagine quando l’utente ridimensiona la riga o la colonna sottostante. Il valore consigliato per un’immagine a cella singola è PlacementType.MoveAndSize, che fa sì che l’immagine si sposti e si ridimensioni insieme alla cella sottostante, preservando l’adattamento esatto.
Istruzioni passo passo
- Crea un nuovo
Workbook(o aprine uno esistente). - Accedi al
Worksheetdi destinazione daworkbook.Worksheets[0]. - Apri il file immagine dal disco in un
FileStreamutilizzando un bloccousingin modo che lo stream venga eliminato correttamente. - Chiama
worksheet.Pictures.Add(5, 2, stream)per aggiungere un’immagine ancorata alla cella C6. Cattura il riferimentoPicturerestituito. - Imposta le quattro coordinate di ancoraggio in modo che l’immagine copra solo la cella C6:
UpperLeftRow = 5,UpperLeftColumn = 2,LowerRightRow = 6,LowerRightColumn = 3. - Imposta
picture.Placement = PlacementType.MoveAndSizeper mantenere l’immagine allineata con C6 quando la colonna o la riga viene ridimensionata. - Opzionalmente, aggiungi del testo di esempio alle celle circostanti per dimostrare che solo la cella C6 contiene l’immagine.
- Salva la cartella di lavoro su disco come file
.xlsx.
Il codice seguente dimostra l’approccio completo.
using System;
using System.IO;
using Aspose.Cells;
using Aspose.Cells.Drawing;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
using (FileStream fs = new FileStream("logo.png", FileMode.Open, FileAccess.Read))
{
int picIndex = worksheet.Pictures.Add(5, 2, fs);
Picture picture = worksheet.Pictures[picIndex];
picture.UpperLeftRow = 5;
picture.UpperLeftColumn = 2;
picture.LowerRightRow = 6;
picture.LowerRightColumn = 3;
picture.Placement = PlacementType.MoveAndSize;
}
workbook.Save("output.xlsx", SaveFormat.Xlsx);
Approccio 2: Incorporare un’immagine direttamente in una cella
Aspose.Cells espone anche un meccanismo più semplice per le immagini legate alla cella: la proprietà Cell.EmbeddedImage. Assegnare i byte dell’immagine a questa proprietà collega l’immagine alla cella stessa, come se fosse contenuto in linea.
Come funzionano le immagini incorporate
- L’immagine viene memorizzata come parte del contenuto della cella piuttosto che come una forma sul livello di disegno.
- L’immagine si ridimensiona automaticamente per adattarsi ai confini resi della cella. Non sono richieste coordinate di ancoraggio né impostazioni di posizionamento.
- La cella rimane una vera cella con un vero indirizzo che può essere referenziato da formule, ordinato come parte di una riga o utilizzato in altre operazioni a livello di cella.
Questo rende Cell.EmbeddedImage l’opzione più concisa quando il tuo obiettivo è semplicemente “un’immagine che vive all’interno di questa cella”.
Istruzioni passo passo
- Crea un nuovo
Workbook(o aprine uno esistente). - Accedi al
Worksheetdi destinazione daworkbook.Worksheets[0]. - Leggi il file immagine dal disco in un array
byte[](ad esempio, utilizzandoFile.ReadAllBytes). - Ottieni un riferimento alla cella di destinazione — tramite
worksheet.Cells["C6"]oworksheet.Cells[5, 2]. - Assegna l’array di byte alla proprietà
EmbeddedImagedella cella. - Opzionalmente, regola l’altezza della riga e la larghezza della colonna della riga e colonna di destinazione per dare all’immagine incorporata un aspetto più prominente.
- Salva la cartella di lavoro su disco come file
.xlsx.
Il codice seguente dimostra l’approccio completo.
var workbook = new Workbook();
var worksheet = workbook.Worksheets[0];
// Ottieni la cella di destinazione C6
var cell = worksheet.Cells["C6"];
// Leggi il file immagine in un array di byte
byte[] imageData = File.ReadAllBytes("logo.png");
// Incorpora l'immagine direttamente nella cella
cell.EmbeddedImage = imageData;
// Opzionalmente regola l'altezza della riga e la larghezza della colonna in modo che l'immagine incorporata sia più visibile
worksheet.Cells.SetColumnWidth(2, 30); // Colonna C (indice 2)
worksheet.Cells.SetRowHeight(5, 100); // Riga 6 (indice 5)
// Salva la cartella di lavoro risultante come file .xlsx
workbook.Save("output.xlsx", SaveFormat.Xlsx);
Scegliere l’approccio giusto
Entrambi gli approcci producono un’immagine che si adatta all’interno di una singola cella, ma differiscono nel modo in cui l’immagine viene memorizzata e nel suo comportamento:
-
Usa un’immagine fluttuante (Approccio 1) quando:
- Hai bisogno di un controllo più fine sul posizionamento, sulla stratificazione o sull’allineamento con altri oggetti di disegno.
- Vuoi che l’immagine si comporti come una forma che può essere selezionata, riordinata o raggruppata con altre forme.
- Richiedi compatibilità legacy con codice che già funziona con
PictureCollection. - Hai bisogno di calcolare le coordinate di ancoraggio dinamicamente in base al layout del foglio di lavoro.
-
Usa un’immagine incorporata (Approccio 2) quando:
- Vuoi il modo più semplice possibile per inserire un’immagine in una cella.
- L’immagine deve spostarsi con la cella come qualsiasi altro contenuto della cella.
- Non hai bisogno di manipolare l’immagine come una forma.
Articoli correlati
- Come inserire un’immagine in una cella
- Come adattare l’immagine alla larghezza e all’altezza della cella
- Aggiungere collegamenti ipertestuali alle immagini
- Caricare un’immagine Web da un URL in un foglio di lavoro Excel
- Manipolare posizione, dimensione e grafico del designer