2015-01-10 14 views
8

Tôi đang xây dựng tệp Excel với EEPlus theo ứng dụng MVC-5 C#. Mọi thứ diễn ra theo kế hoạch cho đến khi tôi thiết lập một chiều cao trên một hàng (vì vậy một hình ảnh có thể phù hợp).Hành vi lạ khi thiết lập chiều cao của hàng trên EPPlus

tôi tải de hình ảnh và thiết lập chiều cao trên cột 20, như vậy:

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

Nhưng, tôi có một logo công ty ở phía trên cùng của tập tin Excel (A1 cell) mà được thay đổi kích cỡ cũng như (trên chiều cao). Được định nghĩa như thế này:

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

Kết quả về vấn đề này:

Screenshot of the Excel File

Bất kỳ trợ giúp sẽ được thực sự đánh giá cao.

Here là tệp excel được đề cập.

Trả lời

7

Nó đi xuống thiết lập EditAs của biểu tượng hình ảnh. Theo mặc định, nó sẽ được đặt thành OneCell nhưng đặt thành TwoCell Tôi tin rằng sẽ giải quyết được sự cố của bạn. Các tài liệu trên nó (nhìn vào EPP 4.0.1) là khá khó hiểu nhưng về cơ bản nói rằng thiết lập này sẽ cho bản vẽ để duy trì vị trí và kích thước hàng/cột ban đầu của nó. Tuy nhiên, những cái tên này có vẻ hơi phản trực giác.

tôi phải đoán những gì mã của bạn trông giống như (cho tôi biết nếu tôi nhầm) và tôi đã có thể tạo lại vấn đề bạn đang gặp phải và sau đó giải quyết với EditAs thiết lập:

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

Các điều khác mà sửa chữa nó đã được thêm biểu tượng SAU hàng thay đổi kích thước nhưng không chắc chắn nếu đó là thực tế cho những gì bạn đang cố gắng để làm.

+0

Điều này đã thực hiện thủ thuật ngay cả khi gọi .SetSize (w, h) - nếu EditAs được để lại với giá trị mặc định, hình ảnh sẽ được kéo dài đến một hình vuông có kích thước nhỏ hơn của tham số cho SetSize. –

Các vấn đề liên quan