31

我正在尝试使用 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);
}

一切正常,所有图像都正确添加,但它们被向下拉伸。以下是其中一张图片的外观:

在此处输入图像描述

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

在此处输入图像描述

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

谢谢。

4

6 回答 6

43

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

这是我所做的:

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

这是它的外观。

在此处输入图像描述

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

于 2012-08-09T09:35:05.110 回答
17

这是您可以在 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;
}
于 2013-12-10T20:52:48.973 回答
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);
}
于 2012-08-07T23:20:47.723 回答
1

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

foreach (ExcelPicture drawing in ws.Drawings)
   drawing.SetSize(100);
于 2012-11-21T21:04:59.590 回答
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);
        }
于 2013-06-27T14:52:19.877 回答
0

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

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

points = pixels * 72 / 96

试试这个。

于 2012-08-06T10:07:00.870 回答