2015-01-10 5 views
8

Ich baue eine Excel-Datei mit EEPLus unter MVC-5 C# -Anwendung. Alles läuft wie geplant, bis ich eine Höhe in einer Reihe einstelle (so kann ein Bild passen).Eigenartiges Verhalten beim Einstellen der Zeilenhöhe auf EPPlus

Ich lade de Bilder und stellen Sie die Höhe auf Spalte 20, etwa so:

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; 
}); 

Aber, ich habe ein Firmenlogo an der Spitze der Excel-Datei (A1 Zelle), die auch die Größe neu bestimmt wird (auf Höhe). Das ist wie folgt definiert:

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); 

auf diese Resultierende:

Screenshot of the Excel File

Jede Hilfe wäre wirklich zu schätzen.

Here ist die Excel-Datei in Frage.

Antwort

7

Es kommt auf die EditAs Einstellung des Bildlogos. Standardmäßig wird es auf OneCell gesetzt, aber ich setze es auf TwoCell. Ich glaube, das wird dein Problem lösen. Die Dokumentation dazu (mit Blick auf EPP 4.0.1) ist ziemlich kryptisch, sagt aber im Grunde, dass diese Einstellung der Zeichnung sagt, dass sie ihre ursprüngliche Zeilen-/Spaltenposition und -größe beibehalten soll. Die Namen scheinen jedoch ein wenig gegenläufig zu sein.

musste ich denke, was Ihr Code wie folgt aussieht (lassen Sie mich wissen, wenn ich es falsch) und ich war in der Lage, das Problem Sie hatten zu reproduzieren und dann mit der EditAs Einstellung lösen:

[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(); 
    } 
} 

Die andere Sache, die es reparierte, war fügen das Logo NACH der Reihe Größe hinzu, aber nicht sicher, ob das praktisch ist, was Sie versuchen zu tun.

+0

Dies tat den Trick selbst beim Aufruf von .SetSize (w, h) - wenn EditAs mit dem Standardwert belassen wurde, wäre das Bild auf ein Quadrat der Größe des kleineren der Parameter auf SetSize gestreckt worden. –

Verwandte Themen