Подтвердить что ты не робот

Добавление изображений в Excel с использованием EPPlus

Я пытаюсь добавить одно и то же изображение несколько раз в файл excel, используя EPPlus. Для этого я использую следующий код:

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

Все работает отлично, и все изображения правильно добавлены, но они растянуты вниз. Вот как должно выглядеть одно из изображений:

enter image description here

Но в Excel это выглядит так:

enter image description here

Мне нужно изменить размер каждой строки начала каждой картинки, но я не думаю, что это повлияет на нее. Будет ли способ добавить фотографии/делать то, что я пытаюсь сделать, или мне придется скопировать вставки изображений вручную? (Я использую изображение в качестве примера)

Спасибо.

4b9b3361

Ответ 1

Я не уверен, что это лучшее решение, но, безусловно, обходной путь для вашей проблемы.

Вот что я сделал:

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

Вот как это выглядит.

enter image description here

По какой-то причине, когда у нас установлена ​​высота строки, она мешает высоте изображения.

Ответ 2

Это одно решение, которое вы можете применить в С#.

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;
}

Ответ 3

попробуйте это

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

или

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

Ответ 4

Перед сохранением документа добавьте следующие права:

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

Ответ 5

используйте приведенный ниже код для настройки изображения в ячейке 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);
        }

Ответ 6

когда вы передаете пример 39 в качестве пикселя, он будет воспринимать его как точку внутри пикселя, поэтому вы думаете, что вы собираетесь установить высоту строки до 39 пикселей, но на самом деле она устанавливает высоту строки до 39 точек. поэтому в соответствии со следующей формулой высота строки будет 52 пикселя.

Если вы хотите установить высоту строки до 39 пикселей, значит, вы должны передать 29.25 Точка (согласно формуле), установленную 39.

points = pixels * 72 / 96

Попробуйте это.