我正在尝试使用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中看起来像这样:
我必须调整每张图片开头的每一行,但我不认为这会影响它。是否有办法添加图片/做我想做的事情,还是我必须手动复制粘贴图片? (我以图片为例)
感谢。
答案 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);
}
这是它的外观。
出于某种原因,当我们设置行高时,它会干扰图片高度。
答案 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
试试这个。