C# 使用ePlus将图像添加到Excel中

C# 使用ePlus将图像添加到Excel中,c#,epplus,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;

我正在尝试使用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);
}
Image logo=Image.FromFile(路径);
ExcelPackage=新的ExcelPackage(信息);
var ws=package.Workbook.Worksheets.Add(“测试页”);
对于(int a=0;a<5;a++)
{
西行(a*5)。高度=39.00D;
var picture=ws.Drawings.AddPicture(a.ToString(),logo);
图片。设置位置(a*5,0,2,0);
}
一切都很完美,所有图像都正确添加,但它们向下拉伸。以下是其中一张图片的外观:

但在excel中看起来是这样的:

我必须调整每张图片开头的每一行的大小,但我不认为这会影响它。是否有办法添加图片/执行我正在尝试的操作,或者我必须手动复制粘贴图片?(我以图片为例)


谢谢。

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

如果您想将行的高度设置为39px,意味着您必须通过29.25点(根据公式)而不是39点

points = pixels * 72 / 96
试试这个。

试试这个

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(路径);
ExcelPackage=新的ExcelPackage(信息);
var ws=package.Workbook.Worksheets.Add(“测试页”);
对于(int a=0;a<5;a++)
{
西行(a*5)。高度=39.00D;
var picture=ws.Drawings.AddPicture(a.ToString(),logo);
//xlMove禁用自动调整大小
picture.Placement=xlMove;//XLPlacement:xlMoveAndSize,xlMove,xlFreeFloating
图片。设置位置(a*5,0,2,0);
}

Image logo=Image.FromFile(路径);
ExcelPackage=新的ExcelPackage(信息);
var ws=package.Workbook.Worksheets.Add(“测试页”);
对于(int a=0;a<5;a++)
{
西行(a*5)。高度=39.00D;
var picture=ws.Drawings.AddPicture(a.ToString(),logo);
picture.From.Column=0;
picture.From.Row=a;
图片。设置大小(120150);
}

我不确定这是否是最好的解决方案,但肯定是解决您问题的方法

以下是我所做的:

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);
}
ExcelPackage=新的ExcelPackage();
var ws=package.Workbook.Worksheets.Add(“测试页”);
对于(int a=0;a<5;a++)
{
西行(a*5)。高度=39.00D;
}
对于(int a=0;a<5;a++)
{
var picture=ws.Drawings.AddPicture(a.ToString(),logo);
图片。设置位置(a*5,0,2,0);
}
这是它的样子


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

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

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

使用以下代码调整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);
        }
Image logo=Image.FromFile(路径);
ExcelPackage=新的ExcelPackage(信息);
var ws=package.Workbook.Worksheets.Add(“测试页”);
对于(int a=0;a<5;a++)
{
西行(a*5)。高度=39.00D;
var picture=ws.Drawings.AddPicture(a.ToString(),logo);
picture.From.Column=0;
picture.From.Row=a;
picture.To.Column=0;//结束单元格值
picture.To.Row=a;//结束单元格值
图片。设置大小(120150);
}

这是一个可以在C#中应用的解决方案


你在哪个单位证明宽度?@Tusharchabhaiya你说的宽度是什么意思?你是说我改变的每一排的高度吗?是的,你改变的是哪一排的高度?意思是px,cm,point我不确定它是哪一个,但是如果你进入excel并重新调整一行的大小,它会显示:
Height:####(#像素)
。我正在更改第一个测量值:
高度:39.00
。我希望这是有意义的。如何使用格式Image Base64在Excel中插入图片?(EPPlus)我正在重新创建excel模板,该行的高度为39点。我必须尽可能近距离地重新创建它,我的问题是图像向下延伸。请尝试将行的高度设置为29.25并进行检查。对于第一个
图片,位置不存在。第二种方法以不同的方式拉伸图像;我试过:
picture.SetSize(logo.Width,logo.Height)
但图片仍然向下延伸。@MatthewRz代替logo.Width和logo.Height使用Width=logo.Width*72/96和Height=logo.Height*72/96。@Tusharchabhaiya图片仍然向下延伸。哦,我看错了你的帖子。让我看看是否可以将图像放入行中。是否需要将图像放入行中?我需要更改行高的唯一原因是,在实际的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);
        }
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;
}