我在用Epplus库在 Asp.Net C# 中生成 Excel 2010 及更高版本兼容的文件。
我使用的是目前最新的版本 3.1.2。
在添加任何图片之前,我首先设置行高:
ExcelPackage pck = new ExcelPackage();
var ws = pck.Workbook.Worksheets.Add("sheet 1");
while (i < dt.Rows.Count + offset)
{
ws.Row(i).Height = 84;
i++;
}
dt
是我的带有 DataRows 的 DataTable。
设置高度后,我再次循环行以添加图片
while (i < dt.Rows.Count + offset)
{
var prodImg = ws.Drawings.AddPicture(dr["code"].ToString(), new FileInfo(path));
prodImg.SetPosition(i - 1, 0, 14, 0);
prodImg.SetSize(75);
}
这可行,但不行:
var prodImg = ws.Drawings.AddPicture(dr["code"].ToString(), new FileInfo(path));
int w = prodImg.Image.Width;
int h = prodImg.Image.Height;
if (h > 140) // because height of 84 is 140 pixels in excel
{
double scale = h / 140.0;
w = (int)Math.Floor(w / scale);
h = 140;
}
int xOff = (150 - w) / 2;
int yOff = (140 - h) / 2;
prodImg.SetPosition(i - 1, xOff, 11, yOff);
prodImg.SetSize(w, h);
这会导致图片偏离中心且图像大小未调整。然后这段代码位于同一个循环中:
var prodImgDm = ws.Drawings.AddPicture("bcdm" + dr["code"].ToString(), new FileInfo(pathDm));
prodImgDm.SetPosition(i - 1, 25, 15, 40);
prodImgDm.SetSize(100);
这有时确实有效。图片prodImgDm
是具有静态宽度和高度的数据矩阵图像,不需要调整大小,因为它们总是很小/很小。所以也没有SetSize
在某些行中,它有效,而在其他行中,它不起作用。真的很奇怪,因为代码是相同的。它可能是图书馆和/或 Excel 中的东西。也许我使用方法不对?有epplus图片专家吗?
提前致谢!!
edit有时一张图片胜过一千个文字,所以这里是屏幕截图。正如您所看到的,产品图像在单元格中未水平和垂直对齐。即使我设置,最右侧的数据矩阵有时也会缩放约 120%SetSize(100)
所以这对我来说真的很奇怪。所以最后一个数据矩阵具有正确的大小......我已经找到了这个所以线程但我认为这对我没有帮助。
edit2013/04/09 Essenpillai 给了我设置的提示
pck.DoAdjustDrawings = false;
但这给了我更奇怪的图像:
数据矩阵仍在按行变化。一行没问题,另一行不行。并且 ean13 代码太宽。