如何使用ClosedXml使Excel在公式单元格中换行文本

本文关键字:单元格 换行 文本 何使用 ClosedXml Excel | 更新日期: 2023-09-27 18:02:09

问题是单元格的内容没有被包装,当该单元格包含一个公式引用一个长字符串的单元格。

在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();。但这也不工作(既不调整某些列的内容)。

如何使用ClosedXml使Excel在公式单元格中换行文本

不应用内容调整,您可以像这样应用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;

我用这个

 xlWorkSheet.Range["A4:A4"].Cells.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实际上是作弊的。它计算所需的高度,然后设置行高度属性。这是我不能在这里做的事情。

你将不得不没有。

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

SetWrapText();为我工作

找到以下解决方案(仅限excel):

  1. 我将row.Cells("start cell : end cell").Style.Alignment.SetWrapText(true)设置为所有使用的单元格

  2. 我写了一个VBA宏与以下文本:Range("A" & Row & ":N" & Row).EntireRow.AutoFit (For Row)Range("A" & Row & ":N" & Row).EntireColumn.AutoFit (For Column)

  3. 指定在文档启动时运行