2017-01-13 2 views
2

Ich verwende EPPlus und C# und versuche, die Höhe einer Zeile automatisch anzupassen bzw. zu ändern, um die Höhe zu berücksichtigen, die zum Anzeigen des gesamten Inhalts einer verbundenen Zelle mit Textumbruch erforderlich ist. Egal, was ich versuche, der Text wird immer abgeschnitten. Da ich diesen Prozess mit verschiedenen Textgrößen auf verschiedenen Arbeitsblättern wiederhole, möchte ich die Zeilenhöhe nicht fest codieren (außer um eine Mindesthöhe für die Zeile zu erzwingen). Wenn möglich, möchte ich dies innerhalb von EPPlus/C# tun.AutoFit-Zeilenhöhe der zusammengeführten Zelle in EPPlus

Mit den Zellen A2: E2 verschmolzen und WrapText = true:

Zelle mit Text Verkürzte

enter image description here

Hier ist, wie es mit dem gewünschten Zellenhöhe aussehen sollte

enter image description here

Hier ist meine relevant und kurze C# -Code

Int32 intToCol; 
intToCol = 5; 
eppWorksheet.Cells[2, 1, 2, intToCol].Merge = true; 
eppWorksheet.Cells[2, 1].Style.WrapText = true; 
//Check if at the minimum height. If not, resize the row 
if (eppWorksheet.Row(2).Height < 35.25) 
{ 
    eppWorksheet.Row(2).Height = 35.25; 
} 

ich Autofit rows in EPPlus geschaut haben und es schien nicht direkt meine Frage zu beantworten, wenn ich es falsch bin zu lesen.

+1

Dies ist ein dokumentiertes Begrenzung von Excel: https://support.microsoft.com/en-us/kb/212010. Keine einfache Lösung Ich fürchte, anders als die Höhe, hier ist ein Beitrag über Autofit von Breiten aber gleichen Prinzip: http://stackoverflow.com/questions/18894671/epplus-autofitcolumns-method-fails-when-a-column- has-merged-cells/23528323 – Ernie

+0

Ich war mir der Excel-Beschränkung bewusst, sah aber keine online-Lösungen, die gut passen und war neugierig, ob andere Lösungen hatten. – cmbarnett87

Antwort

7

Hier ist die Lösung in einer wiederverwendbaren Methode. Übergeben Sie den Textwert, die für die Zelle verwendete Schriftart, die summierte Breite der zusammengeführten Spalten und die Zeilenhöhe. Stellen Sie die Zeilenhöhe mit dem Ergebnis ein.

Verwendung der Methode

eppWorksheet.Row(2).Height = MeasureTextHeight(cell.Value, cell.Style.Font, [enter the SUM of column widths A-E]); 

Wiederverwendbare Methode

public double MeasureTextHeight(string text, ExcelFont font, int width) 
    { 
     if (string.IsNullOrEmpty(text)) return 0.0; 
     var bitmap = new Bitmap(1, 1); 
     var graphics = Graphics.FromImage(bitmap); 

     var pixelWidth = Convert.ToInt32(width * 7.5); //7.5 pixels per excel column width 
     var drawingFont = new Font(font.Name, font.Size); 
     var size = graphics.MeasureString(text, drawingFont, pixelWidth); 

     //72 DPI and 96 points per inch. Excel height in points with max of 409 per Excel requirements. 
     return Math.Min(Convert.ToDouble(size.Height) * 72/96, 409); 
    } 
+1

Sehr gute Lösung. Beachten Sie, dass Sie die Objekte "Bitmap" und "Grafik" entfernen müssen. – Dylan

+1

Ich würde es wählen, wenn es nicht für meine unter 15 Reputation wäre ... – cmbarnett87

+0

Große Lösung. Macht was es auf der Dose steht. Prost Kumpel. –

Verwandte Themen