使用EPPlus将图像添加到Excel中

我试图使用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中看起来像这样:

在此处输入图像描述

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

谢谢。

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

这是我做的:

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

这是它的外观。

在此处输入图像描述

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

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

试试这个

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

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

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

当你传球说例子39作为像素时,它将把它作为像素内部的点,所以你认为你要将行的高度设置为39像素,但实际上它将行的高度设置为39点。 所以根据下面的公式你的行高将变成52像素。

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

 points = pixels * 72 / 96 

试试这个。