如何使用ClosedXml将公式单元格中的文本换行

问题是单元格内容没有被包装,当单元格包含一个公式引用具有一些长string的单元格。

在CodePlex上,我在这个问题上发现了一个线程,并且看到了一个简单的代码:

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

我也尝试手动设置行高而不是包装单元格:

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

但是也没有成功。

有什么我可以做的呢?


在Peter Albert的评论之后,我尝试着设置行的AutoFit 。 我设法在ClosedXML中做的唯一的事情是workSheet.Row(3).AdjustToContent(); 。 但是这也不起作用(既不调整某些列的内容)。

我用这个

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

而不是应用调整内容,你可以像这样应用Wraptext

 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; 

如果你想应用在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; 

对不起,我还是不能写评论… AutoFit不是ClosedXML的属性。 关于AdjustToContents,在我的版本(26/07/2014,我认为0.72.3)忽略WordWrap属性(即分割长行)。 这是主要的检查

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

这个实现忽略了一个单元格由于自动包装而多于一行的情况下的确切高度。 所以,AdjustToContents + AutoWrap不起作用。 如果您需要获得内容大小的高度,则需要避免调用AdjustToContents。 此行为与XL IsAutoHeight属性不兼容。

还要注意,在这个非常相同的Codeplex页面上,库的作者指出:

这一个花了一段时间弄清楚。

当您将单元格上的换行文本设置为指向另一个时,Excel实际上是作弊。 它计算所需的高度,然后设置行高度属性。 这是我在这里不能做的事情。

你必须不要。

对我来说这意味着这个function是不可能的。