2013-03-04 12 views
7

Das Problem besteht darin, dass der Zellinhalt nicht umbrochen wird, wenn diese Zelle eine Formel enthält, die sich auf eine Zelle mit einer langen Zeichenfolge bezieht.Excel-Umbruch Text in Formelzelle mit ClosedXml

Auf CodePlex fand ich einen Thread zu diesem Thema und einem einfachen Code, um das Problem zu sehen:

var generated = new XLWorkbook(); 
var workSheet = generated.AddWorksheet("Test"); 
workSheet.Cell("B1").Style.Alignment.WrapText = true; 
workSheet.Cell("B1").Value = "hello hello hello hello hello"; 
workSheet.Cell("A3").FormulaA1 = "B1"; 
workSheet.Cell("A3").Style.Alignment.WrapText = true; 
generated.SaveAs("Generated.xlsx"); 

Ich habe auch versucht, Zeilenhöhe manuell statt Einwickeln der Zelle zu setzen:

workSheet.Row(3).Height = workSheet.Row(1).Height; 

Allerdings auch ohne Erfolg.

Kann ich irgendetwas dagegen tun?


Nach dem Kommentar von Peter Albert, habe ich versucht, die eingestellte Reihe der AutoFit zu machen. Das einzige, was ich in ClosedXML gefunden habe, ist workSheet.Row(3).AdjustToContent();. Aber das hat auch nicht funktioniert (auch den Inhalt bestimmter Spalten nicht anpassen).

+1

Versuchen Sie 'worksheet.Cell (" A3 "). WrapText = True' gefolgt von 'worksheet.Row (3) .EntireRow.AutoFit' –

+0

@PeterAlbert Ich denke, das ist eine Antwort wert! –

+0

@PeterL. nein es ist nicht – horgh

Antwort

0

Sorry, ich kann immer noch keine Kommentare schreiben ... AutoFit ist keine Eigenschaft von ClosedXML. Über AdjustToContents, in meiner Version (26/07/2014, denke ich, 0.72.3) ignoriert WordWrap-Eigenschaft (die lange Zeilen aufgeteilt). Dies ist die Hauptprüfung

  if (c.HasRichText || textRotation != 0 || c.InnerText.Contains(Environment.NewLine)) 
      { 
       // omissis... 
      } 
      else 
       thisHeight = c.Style.Font.GetHeight(fontCache); 

Diese Implementierung ignoriert die genaue Höhe, falls eine Zelle mehr als eine Zeile wegen autowrap ist. Also, AdjustToContents + AutoWrap funktioniert nicht. Wenn Sie die Höhe der Größe des Inhalts haben müssen, müssen Sie vermeiden, AdjustToContents aufzurufen. Dieses Verhalten ist nicht mit XL IsAutoHeight Eigenschaft kompatibel.

5

Ich benutze diese

xlWorkSheet.Range["A4:A4"].Cells.WrapText = true; 
+0

'ClosedXML' hat diesen Typ von' Range'-Indexer nicht. Hast du vielleicht EPPlus-Code gepostet? –

5

Statt der zum Inhalt anpassen Anwenden können Sie die WrapText wie diese

var generated = new XLWorkbook(); 
var workSheet = generated.AddWorksheet("Test"); 
worksheet.Cell(3, 2).Value = "Hello Hello Hello Hello Hello Hello Name";  
worksheet.Cell(3, 2).Style.Alignment.WrapText = true; 

gelten Und wenn Sie beide anwenden möchten verwenden Sie es nach AdjustToContents.

var generated = new XLWorkbook(); 
var workSheet = generated.AddWorksheet("Test"); 
worksheet.Columns(2, 20).AdjustToContents();  
worksheet.Cell(3, 2).Value = "Hello Hello Hello Hello Hello Hello Name"; 
worksheet.Cell(3, 2).Style.Alignment.WrapText = true; 
0

Beachten Sie auch, dass auf genau dem selben Codeplex Seite, der Autor der Bibliothek lautet:

Dieses dauerte eine Weile, um herauszufinden.

Excel ist tatsächlich Betrug, wenn Sie den Wrap-Text auf eine Zelle festlegen, die auf einen anderen zeigt. Es berechnet die erforderliche Höhe und legt dann die Eigenschaft Zeilenhöhe fest. Das kann ich hier nicht machen.

Sie müssen darauf verzichten.

Für mich bedeutet dies, dass diese Funktion nicht möglich ist.

Verwandte Themen