Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Aspose.Cells offre due modalità distinte per associare un’immagine a una singola cella. Un’immagine mobile è una forma sul livello di disegno del foglio di lavoro che si sovrappone visivamente a un intervallo di celle, mentre un’immagine incorporata è memorizzata all’interno della cella stessa e si ridimensiona automaticamente in base all’area di visualizzazione della cella. Scegli l’approccio che meglio soddisfa le tue esigenze di layout.
Adattare un’immagine esattamente a una singola cella è un requisito comune quando si progettano fogli di calcolo che fungono da report visivi, cataloghi prodotti, elenchi di dipendenti, dashboard o elenchi di inventario. Invece di allungare un’immagine su più celle o di posizionarla in modo approssimativo su un foglio di lavoro, potresti voler ottenere un’immagine pulita e legata alla cella che rimanga allineata alla cella che la contiene. Aspose.Cells supporta questo scenario in due modi complementari:
Picture al foglio di lavoro, imposta il suo Placement su MoveAndSize e regola le celle di ancoraggio (UpperLeftRow, UpperLeftColumn, LowerRightRow, LowerRightColumn) in modo che l’immagine copra esattamente una cella.EmbeddedImage della 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.Un’immagine mobile è un oggetto Picture che vive 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 — determinano la sua 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 mobile copra esattamente una cella, è necessario:
Worksheet.Pictures.Add(int row, int column, Vector<uint8_t> stream), che ancora la nuova immagine alla cella specificata.Picture.Placement su PlacementType.MoveAndSize in 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.L’ancoraggio dell’immagine è definito da quattro proprietà con 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 alla fine della riga r, imposta questo valore a r + 1.Picture.LowerRightColumn — l’indice di colonna del bordo destro dell’immagine. Per fare in modo che il bordo destro dell’immagine si trovi alla fine della colonna c, imposta questo valore a c + 1.Gli indici di riga e colonna in Aspose.Cells sono a base zero. La cella C6 ha indice di riga 5 e indice di colonna 2. Gli errori di off-by-one sull’ancoraggio inferiore destro sono la causa più comune di immagini che sembrano sovrapporsi a una cella adiacente.
Picture.Placement è un’enumerazione di tipo PlacementType che controlla il comportamento dell’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.
Workbook (oppure aprine uno esistente).Worksheet di destinazione tramite workbook.GetWorksheets().Get(0].Vector<uint8_t> in modo che i byte dell’immagine siano disponibili per l’API.worksheet.Pictures.Add(5, 2, imageData) per aggiungere un’immagine ancorata alla cella C6. Cattura il riferimento Picture restituito.UpperLeftRow = 5, UpperLeftColumn = 2, LowerRightRow = 6, LowerRightColumn = 3.picture.Placement = PlacementType.MoveAndSize per mantenere l’immagine allineata con C6 quando la colonna o la riga viene ridimensionata..xlsx.
Il codice seguente dimostra l’approccio completo.#include "Aspose.Cells.h"
#include <fstream>
#include <vector>
#include <iterator>
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
Workbook workbook;
Worksheet worksheet = workbook.GetWorksheets().Get(0);
std::ifstream fs("logo.png", std::ios::binary);
std::vector<uint8_t> stdData((std::istreambuf_iterator<char>(fs)),
std::istreambuf_iterator<char>());
fs.close();
Vector<uint8_t> imageData(reinterpret_cast<const uint8_t*>(stdData.data()),
static_cast<int32_t>(stdData.size()));
int picIndex = worksheet.GetPictures().Add(5, 2, imageData);
Picture picture = worksheet.GetPictures().Get(picIndex);
picture.SetUpperLeftRow(5);
picture.SetUpperLeftColumn(2);
picture.SetLowerRightRow(6);
picture.SetLowerRightColumn(3);
picture.SetPlacement(PlacementType::MoveAndSize);
workbook.Save(u"output.xlsx", SaveFormat::Xlsx);
Aspose::Cells::Cleanup();
return 0;
}
Aspose.Cells espone anche un meccanismo più semplice per le immagini associate alle celle: la proprietà Cell.EmbeddedImage. Assegnando i byte dell’immagine a questa proprietà, l’immagine viene collegata alla cella stessa, come se fosse contenuto inline.
Cell.EmbeddedImage l’opzione più concisa quando il tuo obiettivo è semplicemente “un’immagine che vive all’interno di questa cella”.Workbook (oppure aprine uno esistente).Worksheet di destinazione tramite workbook.GetWorksheets().Get(0].Vector<uint8_t>.worksheet.GetCells().Get("C6"] oppure worksheet.GetCells().Get(5, 2].EmbeddedImage della cella..xlsx.
Il codice seguente dimostra l’approccio completo.#include "Aspose.Cells.h"
#include <vector>
#include <fstream>
#include <iterator>
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
Workbook wb;
Worksheet worksheet = wb.GetWorksheets().Get(0);
Cell cell = worksheet.GetCells().Get(u"C6");
// Legge il file immagine in un array di byte
std::ifstream file("logo.png", std::ios::binary);
std::vector<uint8_t> stdImageData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
file.close();
// Converte std::vector in Aspose::Cells::Vector usando il costruttore puntatore+dimensione
Vector<uint8_t> imageData(stdImageData.data(), (int32_t)stdImageData.size());
// Incorpora l'immagine direttamente nella cella
cell.SetEmbeddedImage(imageData);
// Opzionalmente regola l'altezza della riga e la larghezza della colonna per rendere l'immagine incorporata più visibile
worksheet.GetCells().SetColumnWidth(2, 30); // Colonna C (indice 2)
worksheet.GetCells().SetRowHeight(5, 100); // Riga 6 (indice 5)
// Salva la cartella di lavoro risultante come file .xlsx
wb.Save(u"output.xlsx", SaveFormat::Xlsx);
Aspose::Cells::Cleanup();
return 0;
}
Entrambi gli approcci producono un’immagine che si adatta a una singola cella, ma differiscono nel modo in cui l’immagine viene memorizzata e nel suo comportamento:
PictureCollection.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.