2013-03-04 16 views
7

Il problema è che il contenuto della cella non viene incapsulato, quando quella cella contiene una formula che si riferisce a una cella con una stringa lunga.Come rendere il testo a capo di Excel nella cella formula con ClosedXml

Su CodePlex ho trovato un thread su questo problema e un semplice codice di vedere il problema:

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

Ho anche cercato di impostare altezza di righe manualmente invece di avvolgere cella:

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

Tuttavia senza successo neanche.

C'è qualcosa che posso fare a riguardo?


A seguito del commento di Peter Albert, ho cercato di fare del AutoFit fila set. L'unica cosa che sono riuscito a trovare per farlo in ClosedXML è workSheet.Row(3).AdjustToContent();. Ma questo non ha funzionato neanche (né regolando il contenuto di determinate colonne).

+1

Prova 'worksheet.Cell (" A3 "). WrapText = True' seguito da' worksheet.Row (3) .EntireRow.AutoFit' –

+0

@PeterAlbert Suppongo che valga la pena di dare una risposta! –

+0

@PeterL. no non è – horgh

risposta

0

Spiacente, non riesco ancora a scrivere commenti ... AutoFit non è una proprietà di ClosedXML. Informazioni su AdjustToContents, nella mia versione (26/07/2014, penso 0.72.3) ignora la proprietà WordWrap (che divide le righe lunghe). Questo è il controllo principale

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

Questa implementazione ignora l'altezza esatta in caso di una cella è più una riga a causa di autowrap. Quindi, AdjustToContents + AutoWrap non funziona. Se è necessario avere l'altezza della dimensione del contenuto, è necessario evitare di chiamare AdjustToContents. Questo comportamento non è compatibile con la proprietà XL IsAutoHeight.

5

Io uso questo

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

'ClosedXML' non ha questo tipo di indicizzatore' Range'. Hai forse pubblicato il codice 'EPPlus'? –

5

invece di applicare la Regola al Sommario, è possibile applicare la Wraptext come questo

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; 

E se si desidera applicare sia utilizzarlo dopo 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

Si noti inoltre che in quella stessa pagina Codeplex, l'autore degli stati libreria:

Questo ha preso un po 'per capire.

Excel è in realtà un inganno quando si imposta il testo a capo su una cella che punta a un altro. Calcola l'altezza richiesta e imposta la proprietà dell'altezza della riga. Questo è qualcosa che non posso fare qui.

Dovrai fare a meno.

Per me questo implica che questa funzione non è possibile.

Problemi correlati