2015-01-10 4 views
8

Sto costruendo un file Excel con EEPlus sotto l'applicazione MVC-5 C#. Tutto procede come pianificato fino a quando non ho impostato un'altezza su una riga (quindi un'immagine può adattarsi).Comportamento strano quando si imposta l'altezza di una riga su EPPlus

ho caricare le immagini de e impostare l'altezza sulla colonna di 20, in questo modo:

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

Ma, ho un logo aziendale nella parte superiore del file di Excel (cella A1) che viene ridimensionata come pure (in altezza). Che si definisce in questo modo:

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

risultante su questo:

Screenshot of the Excel File

Qualsiasi aiuto sarebbe molto apprezzato.

Here è il file excel in questione.

risposta

7

Si passa all'impostazione EditAs del logo dell'immagine. Per impostazione predefinita sarà impostato su OneCell ma impostandolo su TwoCell credo che risolverà il tuo problema. La documentazione su di esso (guardando a EPP 4.0.1) è piuttosto criptica, ma in pratica dice che questa impostazione dirà al disegno di mantenere la posizione e la dimensione della riga/colonna originale. I nomi sembrano però un po 'controintuitivi.

dovessi indovinare ciò che il codice è simile (fatemi sapere se ho sbagliato) e sono stato in grado di riprodurre il problema si dovesse avere e quindi di risolvere con l'impostazione 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(); 
    } 
} 

Il Un'altra cosa che lo aggiusta è stato aggiungere il logo DOPO la ridimensionamento della riga, ma non è sicuro se ciò è pratico per quello che stai cercando di fare.

+0

Questo ha fatto il trucco anche quando si chiama .SetSize (w, h) - se EditAs è stato lasciato con il valore predefinito, l'immagine sarebbe stata allungata su un quadrato della dimensione del minore dei parametri su SetSize. –

Problemi correlati