J'essaie d'ajouter plusieurs fois la même image dans un fichier Excel à l'aide d'EPPlus. J'utilise le code suivant pour ce faire:
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);
}
Tout fonctionne parfaitement et toutes les images sont correctement ajoutées mais elles sont étirées vers le bas. Voici à quoi devrait ressembler l'une des images:
Mais cela ressemble à ceci dans Excel:
Je dois redimensionner chaque ligne du début de chaque image mais je ne pense pas que cela l'affecterait. Y aurait-il un moyen d'ajouter les images/faire ce que j'essaie de faire ou devrais-je copier-coller les images manuellement? (J'utilise l'image comme exemple)
Merci.
Je ne sais pas si c'est la meilleure solution mais certainement une solution de contournement pour votre problème.
Voici ce que j'ai fait:
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);
}
Voici à quoi ça ressemble.
Pour une raison quelconque, lorsque la hauteur de la ligne est définie, cela interfère avec la hauteur de l'image.
C'est une solution que vous pouvez appliquer 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;
}
Ajoutez ce qui suit juste avant d'enregistrer le document:
foreach (ExcelPicture drawing in ws.Drawings)
drawing.SetSize(100);
essaye ça
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);
}
ou
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);
}
utilisez le code ci-dessous pour ajuster l'image dans une cellule 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);
}
lorsque vous passez par exemple 39 en pixel, il le prendra comme point de pixel en interne, vous pensez donc que vous allez définir la hauteur de la ligne à 39 pixels, mais en fait, il définit la hauteur de la ligne à 39 points. Ainsi, selon la formule suivante, la hauteur de votre ligne deviendra 52 pixels.
Si vous souhaitez définir la hauteur de la ligne à 39 pixels, vous devez passer 29,25 points (selon la formule) au lieu de 39.
points = pixels * 72 / 96
Essaye celui-là.