C# 设置行时的奇怪行为';EPPlus上的s高度
我正在MVC-5C#应用程序下使用EEPlus构建Excel文件。一切都按计划进行,直到我在一行上设置了一个高度(这样图像才能适合) 我加载de图像并在第20列上设置高度,如下所示:C# 设置行时的奇怪行为';EPPlus上的s高度,c#,excel,asp.net-mvc-5,epplus,C#,Excel,Asp.net Mvc 5,Epplus,我正在MVC-5C#应用程序下使用EEPlus构建Excel文件。一切都按计划进行,直到我在一行上设置了一个高度(这样图像才能适合) 我加载de图像并在第20列上设置高度,如下所示: Image cfPhoto = null; Bitmap cfBm = null; ExcelPicture pictureCf = null; var photoInitialColumn = 0; i++; completedFormPhotos.ForEach(delegate(CompletedFormPh
Image cfPhoto = null;
Bitmap cfBm = null;
ExcelPicture pictureCf = null;
var photoInitialColumn = 0;
i++;
completedFormPhotos.ForEach(delegate(CompletedFormPhoto cfP)
{
cfPhoto = Image.FromFile(HostingEnvironment.MapPath("~/Content/Images/FormPhotos/" + cfP.Id + ".jpg"));
cfBm = new Bitmap(cfPhoto, new Size(215, 170));
pictureCf = worksheet.Drawings.AddPicture(cfP.Id.ToString(), cfBm);
pictureCf.SetPosition(i+1, 0, photoInitialColumn, 10);
worksheet.Cells[_alpha[photoInitialColumn] + (i + 3) + ':' + _alpha[photoInitialColumn + 1] + (i + 3)].Merge = true;
worksheet.Cells[_alpha[photoInitialColumn] + (i + 3) + ':' + _alpha[photoInitialColumn + 1] + (i + 3)].Value = cfP.comment;
worksheet.Cells[_alpha[photoInitialColumn] + (i + 3) + ':' + _alpha[photoInitialColumn + 1] + (i + 3)].Style.WrapText = true;
photoInitialColumn += 2;
//HERE I SET THE HEIGHT. At this point, i == 18
worksheet.Row(i+2).Height = 180;
});
但是,我在Excel文件(A1单元格)的顶部有一个公司徽标,它也可以调整大小(在高度上)。定义如下:
Image _keyLogo = Image.FromFile(HostingEnvironment.MapPath("~/Content/Images/key_logo.png"));
var pictureLogo = worksheet.Drawings.AddPicture("Logo Key Quimica", _keyLogo);
pictureLogo.SetPosition(0, 0, 0, 0);
因此:
任何帮助都将不胜感激
是有问题的excel文件。它归结为图片徽标的
EditAs
设置。默认情况下,它将设置为OneCell
,但将其设置为TwoCell
我相信会解决您的问题。关于它的文档(查看EPP4.0.1)相当隐晦,但它基本上表示此设置将告诉图形保持其原始行/列位置和大小。不过,这些名字似乎有点违反直觉
我必须猜测您的代码是什么样子(如果我弄错了,请告诉我),我能够重现您遇到的问题,然后使用EditAs
设置解决:
[TestMethod]
public void Image_Stretch_Test()
{
//http://stackoverflow.com/questions/27873762/weird-behavior-when-setting-a-rows-height-on-epplus
var existingFile = new FileInfo(@"c:\temp\temp.xlsx");
if (existingFile.Exists)
existingFile.Delete();
using (var package = new ExcelPackage(existingFile))
{
var workbook = package.Workbook;
var worksheet = workbook.Worksheets.Add("newsheet");
var _keyLogo = Image.FromFile("C:/Users/Ernie/Desktop/key_logo.png");
var pictureLogo = worksheet.Drawings.AddPicture("Logo Key Quimica", _keyLogo);
pictureLogo.SetPosition(0, 0, 0, 0);
pictureLogo.EditAs = eEditAs.TwoCell; //REMOVE THIS TO SHOW THE STRETCH PROBLEM
var cfPhoto = Image.FromFile("C:/Users/Ernie/Desktop/Main_Pic.png");
var cfBm = new Bitmap(cfPhoto, new Size(215, 170));
var pictureCf = worksheet.Drawings.AddPicture("Main_Pic", cfBm);
pictureCf.SetPosition(10, 0, 0, 0);
worksheet.Row(11).Height = 280;
package.Save();
}
}
另一个解决方法是在行调整大小后添加徽标,但不确定这是否适用于您尝试执行的操作。即使在调用.SetSize(w,h)时,这也起到了作用-如果将EditAs保留为默认值,则图像将被拉伸到与要设置大小的参数中较小的参数大小相等的正方形。