EPPlus中设置行高时出现奇怪的行为

10

我正在使用MVC-5 C#应用程序下的EEPlus构建Excel文件。一切都按计划进行,直到我设置了行高度(以便能够适应图像)。

我加载图像并在第20列上设置高度,如下所示:

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文件截图

非常感谢您的帮助。

这里 是相关的Excel文件。

1个回答

10

问题解决的关键在于图片标志的EditAs设置。默认情况下,它将被设置为OneCell,但我相信将其设置为TwoCell可以解决您的问题。它的文档(查看EPP 4.0.1)相当难以理解,但基本上是说此设置将告诉绘图保持其原始行/列位置和大小。不过,名称似乎有点具有违直觉性。

我不确定您的代码具体是什么样子(如果我猜错了,请告诉我),但我能够复现您遇到的问题,并通过EditAs设置解决它:

[TestMethod]
public void Image_Stretch_Test()
{
    //https://dev59.com/Ml4c5IYBdhLWcg3weqW9
    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保留默认值,则图像将被拉伸为SetSize参数中较小的那个的正方形大小。 - Alex Mazzariol
eEditAs.TwoCell是什么?我找不到eEditAs的定义,它是行还是单元格实例?请指导我。谢谢。 - user15940620

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接