read - officeopenxml c#
Agregando imágenes a Excel usando EPPlus (6)
Agregue el siguiente derecho antes de guardar el documento:
foreach (ExcelPicture drawing in ws.Drawings)
drawing.SetSize(100);
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í es cómo debe verse una de las imágenes:
Pero se ve así en excel:
Tengo que cambiar el tamaño de cada fila del inicio de cada imagen, pero no creo que eso lo afecte. ¿Habría una 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.
Esta es una solución que puede 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;
}
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.
Por alguna razón, cuando tenemos la altura de la fila establecida, esto interfiere con la altura de la imagen.
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 esté pasando, digamos el ejemplo 39 como píxel, lo tomará como punto interno del píxel internamente, 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. así que 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.
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);
}