使用EPPlus将图像添加到Excel中

时间:2012-07-21 01:10:48

标签: c# epplus

我正在尝试使用EPPlus将相同的图像多次添加到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.SetPosition(a*5, 0, 2, 0);
}

一切都很完美,所有图像都正确添加,但它们向下拉伸。以下是其中一张图片的样子:

enter image description here

但它在excel中看起来像这样:

enter image description here

我必须调整每张图片开头的每一行,但我不认为这会影响它。是否有办法添加图片/做我想做的事情,还是我必须手动复制粘贴图片? (我以图片为例)

感谢。

6 个答案:

答案 0 :(得分:31)

我不确定这是否是最佳解决方案,但绝对是解决您问题的方法。

这就是我的所作所为:

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

出于某种原因,当我们设置行高时,它会干扰图片高度。

答案 1 :(得分:8)

这是一个可以在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;
}

答案 2 :(得分:1)

试试这个

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

答案 3 :(得分:1)

在保存文档之前添加以下内容:

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

答案 4 :(得分:1)

使用以下代码调整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);
        }

答案 5 :(得分:0)

当您传递示例39作为像素时,它会将其作为内部像素的点,因此您认为您要将行的高度设置为39像素,但实际上它将行的高度设置为39点。所以根据下面的公式,你的行高将变成52像素。

如果你想将行的高度设置为39px,则意味着你必须通过29.25点(根据公式).3。

points = pixels * 72 / 96

试试这个。