Agregar imágenes a Excel usando EPPlus

Estoy intentando agregar la misma imagen varias veces en un archivo de Excel usando EPPlus. Estoy usando el siguiente código para hacerlo:

Image logo = Image.FromFile(path); ExcelPackage package = new ExcelPackage(info); var ws = package.Workbook.Worksheets.Add("Test Page"); for(int a = 0; a < 5; a++) { ws.Row(a*5).Height = 39.00D; var picture = ws.Drawings.AddPicture(a.ToString(), logo); picture.SetPosition(a*5, 0, 2, 0); } 

Todo funciona perfectamente y todas las imágenes se agregan correctamente pero se estiran hacia abajo. Aquí está lo que debería ser una de las imágenes:

enter image description here

Pero se ve así en excel:

enter image description here

Tengo que cambiar el tamaño de cada fila del inicio de cada imagen, pero no creo que eso la afecte. ¿Habría alguna manera de agregar las imágenes / hacer lo que estoy tratando de hacer o tendría que copiar y pegar las imágenes manualmente? (Estoy usando la imagen como ejemplo)

Gracias.

No estoy seguro de si esta es la mejor solución, pero definitivamente una solución para su problema.

Esto es lo que hice:

 ExcelPackage package = new ExcelPackage(); var ws = package.Workbook.Worksheets.Add("Test Page"); for (int a = 0; a < 5; a++) { ws.Row(a * 5).Height = 39.00D; } for (int a = 0; a < 5; a++) { var picture = ws.Drawings.AddPicture(a.ToString(), logo); picture.SetPosition(a * 5, 0, 2, 0); } 

Así es como se ve.

enter image description here

Por alguna razón, cuando tenemos la altura de fila establecida, está interfiriendo con la altura de la imagen.

Esta es una solución que puedes aplicar en C #.

 private void AddImage(ExcelWorksheet oSheet, int rowIndex, int colIndex, string imagePath) { Bitmap image = new Bitmap(imagePath); ExcelPicture excelImage = null; if (image != null) { excelImage = oSheet.Drawings.AddPicture("Debopam Pal", image); excelImage.From.Column = colIndex; excelImage.From.Row = rowIndex; excelImage.SetSize(100, 100); // 2x2 px space for better alignment excelImage.From.ColumnOff = Pixel2MTU(2); excelImage.From.RowOff = Pixel2MTU(2); } } public int Pixel2MTU(int pixels) { int mtus = pixels * 9525; return mtus; } 

prueba esto

 Image logo = Image.FromFile(path); ExcelPackage package = new ExcelPackage(info); var ws = package.Workbook.Worksheets.Add("Test Page"); for(int a = 0; a < 5; a++) { ws.Row(a*5).Height = 39.00D; var picture = ws.Drawings.AddPicture(a.ToString(), logo); // xlMove disables the auto resizing picture.Placement = xlMove; //XLPlacement : xlMoveAndSize,xlMove,xlFreeFloating picture.SetPosition(a*5, 0, 2, 0); } 

o

 Image logo = Image.FromFile(path); ExcelPackage package = new ExcelPackage(info); var ws = package.Workbook.Worksheets.Add("Test Page"); for(int a = 0; a < 5; a++) { ws.Row(a*5).Height = 39.00D; var picture = ws.Drawings.AddPicture(a.ToString(), logo); picture.From.Column = 0; picture.From.Row = a; picture.SetSize(120, 150); } 

Agregue lo siguiente a la derecha antes de guardar el documento:

 foreach (ExcelPicture drawing in ws.Drawings) drawing.SetSize(100); 

use el siguiente código para ajustar la imagen en una celda de Excel:

  Image logo = Image.FromFile(path); ExcelPackage package = new ExcelPackage(info); var ws = package.Workbook.Worksheets.Add("Test Page"); for(int a = 0; a < 5; a++) { ws.Row(a*5).Height = 39.00D; var picture = ws.Drawings.AddPicture(a.ToString(), logo); picture.From.Column = 0; picture.From.Row = a; picture.To.Column=0;//end cell value picture.To.Row=a;//end cell value picture.SetSize(120, 150); } 

cuando pase, digamos el ejemplo 39 como píxel, lo tomará como un punto inscrito internamente en el píxel, por lo que cree que va a establecer la altura de la fila en 39 píxeles, pero en realidad está configurando la altura de la fila en 39 puntos. entonces de acuerdo con la siguiente fórmula, la altura de su fila se convertirá en 52 píxeles.

Si desea establecer la altura de la fila en 39px, significa que debe pasar 29.25 puntos (según la fórmula) en lugar de 39.

 points = pixels * 72 / 96 

Prueba este.