2012-06-19 22 views
5

Il mio compito è di inserire un'immagine dall'URL in una determinata cella in un foglio di lavoro Excel. Sto usando NetOffice con C# per farlo.Come inserire un'immagine nella cella excel?

Il mio problema principale è che non riesco a trovare un modo per inserire un'immagine esattamente nella cella. Quando uso Sheet.Shapes.AddPicture(), devo calcolare le coordinate in cui inserire la mia immagine. Naturalmente, non ho alcun problema con questo (ho creato una sorta di soluzione alternativa), tuttavia, mi piacerebbe chiedere se il mio approccio per risolvere questo problema è giusto o se c'è qualche altro metodo in cui posso inserire l'immagine nella cella.

Qui è la mia soluzione:

var floatLeft = FloatLeftPixelsCalculation(rowNumber); 
var floatTop = FloatTopPixelsCalculation(rowNumber); 
Worksheet.Shapes.AddPicture(urlCellValue, MsoTriState.msoFalse, MsoTriState.msoTrue, floatLeft, floatTop, PictureWidth, PictureHeight); 

public float FloatTopPixelsCalculation(int rowNumber) 
     { 
      float floatTop = 0; 
      for (var rNumber = 1; rNumber < rowNumber; rNumber++) 
      { 
       var cellHeight = Convert.ToSingle(Worksheet.Cells[rNumber, ColumnIndex].RowHeight); 
       floatTop = floatTop + cellHeight; 
      } 

      return floatTop; 
     } 

     public float FloatLeftPixelsCalculation(int rowNumber) 
     { 
      float floatLeft = 0; 
      for (var columnNumber = 1; columnNumber < ColumnIndex; columnNumber++) 
      { 
       var cellWidth = Convert.ToSingle(Worksheet.Cells[rowNumber, columnNumber].ColumnWidth); 
       floatLeft = floatLeft + cellWidth; 
      } 

      return floatLeft; 
     } 
+0

Per quanto ne so, le immagini non vanno direttamente all'interno delle celle in un foglio di lavoro. Ciò è evidenziato dall'inserimento di un'immagine in un foglio di calcolo - si noti che è un po '"fluttuante" sopra le celle - lo stesso con clip art, forme, ecc. –

+1

Non è possibile inserire immagini nelle celle. Il tuo approccio per allinearli con la cella, usando le proprietà Top e Left, ecc., È quello corretto. –

risposta

1

Anche se Doug Glancy è corretto nel dire che Excel non considera un quadro di essere "dentro" di una cellula, un quadro può essere associato con una particolare cellula e agirà intuitivamente se posizionato correttamente.

Ad esempio, supponiamo di avere un elenco di case. Le colonne A-Y hanno varie informazioni sulla casa e la colonna Z ha una foto della casa. Se le immagini sono correttamente associate alle celle corrette, quando si ordinano, tagliano, copiano, incollano intervalli, le immagini si comportano come ci si aspetterebbe.

Affinché Excel per manipolare le case correttamente, essi devono soddisfare due criteri:

  1. L'immagine deve essere completamente all'interno della cellula. Usando il tuo codice sopra, dovrai prima posizionare l'immagine come hai fatto, quindi regolare l'altezza della riga e la larghezza della colonna della cella almeno all'altezza e alla larghezza dell'immagine.

  2. La proprietà shape.Placement deve essere impostata su xlMove o xlMoveAndSize. Dalla documentazione di MS, la proprietà posizionamento può essere uno dei seguenti: xlFreeFloating (3) Object is free floating. xlMove (2) Object is moved with the cells. xlMoveAndSize (1) Object is moved and sized with the cells.

Se l'immagine è completamente all'interno della cellula e .Placement è impostato su xlMove o xlMoveAndSize, allora ogni volta le mosse cellulari contenitore, l'immagine si muoverà con esso. Se .Placement è impostato su xlMoveandSize, l'immagine si espanderà o si contrarrà ogni volta che viene modificata la larghezza o l'altezza della cella. Questo può essere utile perché assicura che l'immagine rimanga all'interno dei limiti della cella. Se si utilizza xlMoveandSize, si potrebbe anche prendere in considerazione l'impostazione di ShapeRange.LockAspectRatio = msoTrue per evitare che l'immagine venga distorta quando vengono regolate le larghezze delle colonne o l'altezza delle righe.

Quindi sì, Virginia, è possibile posizionare un'immagine in una cella. Assicurati di averlo posizionato con cura.

Problemi correlati