使用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
试试这个。