web-dev-qa-db-fra.com

Ajout d'images dans Excel à l'aide d'EPPlus

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:

enter image description here

Mais cela ressemble à ceci dans Excel:

enter image description here

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.

25
matthewr

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.

enter image description here

Pour une raison quelconque, lorsque la hauteur de la ligne est définie, cela interfère avec la hauteur de l'image.

32
Jack7

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;
}
9
Jhonny Nina

Ajoutez ce qui suit juste avant d'enregistrer le document:

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

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);
}
1
S3ddi9

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);
        }
1
Bharat Pandey

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à.

0
Tushar Chhabhaiya